2012-03-13 7 views
5

Django ट्यूटोरियल के अनुसार, आपको cleaned_data शब्दकोश का उपयोग करके फॉर्म फ़ील्ड तक पहुंच प्राप्त करनी चाहिए। मैं सोच रहा हूं कि मैं फॉर्म के गुणों का उपयोग क्यों नहीं कर सकता? मेरा फॉर्म बस ठीक है, लेकिन जब मैं इसे एक्सेस करने का प्रयास करता हूं, तो Django शिकायत करता है कि ऑब्जेक्ट में विशेषता नहीं है। मैंने नीचे कुछ कोड जोड़ा है जो मुझे उम्मीद है कि समस्या का निदान करने में मदद मिलेगी।डीजेंगो व्यू में गुणों के रूप में फॉर्म फ़ील्ड तक पहुंच

प्रपत्र:

class CustomForm(forms.Form): 
    description = forms.CharField(widget = forms.TextInput(attrs = {'placeholder' : 'enter some text'}), label = "My form") 

दृश्य:

def process_form(request): 
    if request.method != 'POST': 
     raise Http404 

    myForm = CustomForm(request.POST) 

    if not myForm.is_valid(): 
     c = RequestContext(request) 
     return render_to_response('home/index.html', {'form' : myForm }, c) 

    # debug 
    print 'Description: ' + myForm.description # this does NOT work 
    # print 'Description: ' + myForm.cleaned_data['description'] # this does work 

मैं निम्नलिखित त्रुटि मिलती है: 'CustomForm' ऑब्जेक्ट कोई विशेषता 'विवरण' है। क्या मुझे दस्तावेज़ों में कुछ याद आया जो कहता है कि मैं ऐसा नहीं कर सकता?

उत्तर

10

जिस तरह से आप का उपयोग कर खेतों django.forms सिर्फ एक सुविधाजनक है परिभाषित, डी स्पष्ट वाक्यविन्यास; यह वास्तव में अंतिम फॉर्म श्रेणी, या इसका एक उदाहरण का प्रतिनिधि नहीं है, विशेषताओं के संदर्भ में दिखता है। वस्तु जा रहा है अनुकूलित करने के लिए एक हुक -

फार्म एक metaclass (इसे में बहुत गहरा हो रही बिना, एक metaclass class कीवर्ड का उपयोग के रूप में एक __init__ विधि कोष्ठकों का उपयोग एक वर्ग का एक उदाहरण बनाने के लिए है एक वर्ग की घोषणा करने के लिए है बनाया गया, जो मेटाक्लास के मामले में, class है!) जो परिभाषा समय पर फॉर्म क्लास से फ़ील्ड्स को चुनता है और उन्हें base_fields dict में जोड़ता है। जब आप किसी फॉर्म को तुरंत चालू करते हैं, तो इसकी base_fields उदाहरण पर fields विशेषता पर गहरी प्रतिलिपि बनाई जाती है। भ्रम की

एक बात हो सकती है कि आप टेम्पलेट्स में प्रदर्शन के लिए क्षेत्रों तक पहुँचने के लिए . का उपयोग करें - क्या वास्तव में क्या हो रहा है है कि वहाँ Django के टेम्पलेट इंजन पहले संपत्ति लुकअप और धातु रूप वर्ग को हल करने शब्दकोश शैली [] पहुँच उपयोग करने का प्रयास इस का लाभ उठाने के लिए __getitem__ विधि को परिभाषित करने के लिए, फॉर्म इंस्टेंस के fields निर्देश से उचित फ़ील्ड को देखकर और BoundField के साथ लपेटकर, एक रैपर जो क्षेत्र को प्रदर्शित करने के लिए फ़ॉर्म से फ़ील्ड और डेटा का उपयोग करने के बारे में जानता है।

15

आपके प्रपत्र तो आप MyForm cleaned_data उपयोग कर सकते हैं मान्य है: आप को देखने के लिए तुम क्यों myForm.description उपयोग नहीं कर सकते तो आप अपने MyForm के डेटा शब्दकोश देख सकते हैं चाहते हैं

print myForm.cleaned_data.get('description') 

:

print myForm.__dict__ 
+0

मैं समझता हूँ कि मैं cleaned_data का उपयोग कर भी पहुंच सकते हैं। जो मुझे समझ में नहीं आता है, मैं संपत्ति का उपयोग करके इसका उपयोग क्यों नहीं कर सकता: myForm.description। हुड के नीचे वास्तव में क्या होता है जो मुझे इसे एक्सेस करने से रोकता है? –

3

आप अपने क्षेत्र की यात्रा dict तक पहुंच सकते हैं।

form.__dict__["fields"]["description"] 
3

आप अपने फ़ील्ड विशेषता से फ़ॉर्म उदाहरण के फ़ील्ड तक पहुंच सकते हैं।

myForm.fields['description'] 

और लेबल की तरह कुछ संपत्ति इस तरह पहुँचा जा सकता है:

myForm.fields['description'].label 

मूल्य इसी प्रदर्शित करने के लिए कैसे सुनिश्चित नहीं हैं। किसी को भी विचार है?

यहाँ मेरे संदर्भ

https://docs.djangoproject.com/en/dev/ref/forms/api/#accessing-the-fields-from-the-form

संबंधित मुद्दे