2010-04-12 18 views
9

Ich habe ein Modellist ein ModelChoiceField immer erforderlich?

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

Wenn ein Artikel ein Original-Artikel ist dann 'parent_article = None'. Wenn ein Artikel eine Übersetzung ist, dann 'parent_article' <> Keine.

Also habe ich:

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 
    . 
    . 

Wenn ich jetzt gelten diese alle es scheint gut zu funktionieren, aber wenn ich nicht über eine ‚Eltern Artikel‘ wählen erhalte ich eine Fehlermeldung in Admin Angabe „Dieses Feld ist erforderlich ", obwohl das Modell sagt:" null = True, Blank = True ".

Wenn ich die personalisierte Dienste nicht, das heißt die Aussage

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

dann alles funktioniert Sauerteig aus, außer ich jetzt zu viele Möglichkeiten bekommen. In der Dokumentation von "ModelChoicesField" können Sie eine Phrase "Beachten Sie, dass, wenn ein ModelChoiceField erforderlich ist ..." impliziert ein ModelChoiceField muss nicht erforderlich sein.

Irgendeine Idee, wie man damit umgeht?

Antwort

21

Wenn Sie das Formular überschreiben möchten, müssen Sie das Feld in ArticleAdminForm als nicht erforderlich festlegen.

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

Hervorheben des Punktes: Wenn Sie ein Feld überschreiben, überschreiben Sie * all * seine Attribute, einschließlich, ob es erforderlich ist oder nicht. –

+0

Vielen Dank für die Erklärung. Eigentlich wusste ich, dass es etwas mit dem "Erforderlich = Falsch" zu tun hatte, aber ich hatte die Syntax falsch. – Henri

Verwandte Themen