2010-04-12 12 views
9

मैं एक लेख एक मूल लेख फिर 'parent_article = कोई नहीं' है, तो एक मॉडलएक मॉडलChoiceField हमेशा आवश्यक है?

class Article(models.Model): 
    . 
    . 
    language = models.ForeignKey(Language, help_text="Select the article's language") 
    parent_article = models.ForeignKey('self', null=True, blank=True) 

है। यदि कोई लेख एक अनुवाद है तो 'parent_article' <> कोई नहीं।

तो मैं बनाया:

class ArticleAdminForm(forms.ModelForm): 
    . 
    . 
    parent_article = forms.ModelChoiceField(queryset=AyurvedicArticle.objects.filter(parent_article=None), help_text="Select the parent article (if any)") 

    class Meta: 
     Article 

class ArticleAdmin(admin.ModelAdmin): 
    form = ArticleAdminForm 
    . 
    . 

अब जब मैं यह सब यह ठीक से काम करने लगता है, लेकिन जब मैं एक 'जनक लेख' का चयन नहीं करते मैं बताते हुए व्यवस्थापक में एक त्रुटि संदेश मिलता "यह क्षेत्र लागू आवश्यक है "हालांकि मॉडल कहता है:" शून्य = सही, खाली = सही "।

जब मैं, अनुकूलित रूप है, अर्थात उसके बाद सब कुछ काम से खमीर उठा बयान

class ArticleAdmin(admin.ModelAdmin): 
# form = ArticleAdminForm 
    . 
    . 

का उपयोग नहीं सिवाय अब मैं कई विकल्प के लिए मिलता है। "ModelChoicesField" के प्रलेखन में आप एक वाक्यांश पढ़ सकते हैं "ध्यान दें कि यदि मॉडल चॉइसफ़िल्ल्ड आवश्यक है ..." मॉडलिंग चॉइसफ़िल्ल्ड को लागू करने की आवश्यकता नहीं है।

कोई विचार यह कैसे निपटाना है?

उत्तर

21

यदि आप फॉर्म को ओवरराइड करने जा रहे हैं तो आपको ArticleAdminForm में आवश्यक फ़ील्ड सेट करने की आवश्यकता है।

class ArticleAdminForm(forms.ModelForm): 
    . 
    . 
    parent_article = forms.ModelChoiceField(
     queryset=AyurvedicArticle.objects.filter(parent_article=None), 
     required=False, 
     help_text="Select the parent article (if any)" 
    ) 

    class Meta: 
     Article 
+1

वर्थ बिंदु पर बल: यदि आप एक क्षेत्र को ओवरराइड, आप ओवरराइड * सभी * उसके गुण, सहित चाहे या नहीं यह आवश्यक है। –

+0

स्पष्टीकरण के लिए बहुत बहुत धन्यवाद। असल में मुझे पता था कि 'आवश्यक = झूठी' के साथ इसका कुछ संबंध था लेकिन मेरे पास वाक्यविन्यास गलत था। – Henri

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