2010-04-12 72 views
9

我有一个模型是始终需要的ModelChoiceField?

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 =无”。如果一篇文章是翻译,那么'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 
    . 
    . 

现在,当我申请这一切似乎很好地工作,但是当我不选择的母公司的文章“我得到了联系,指出错误消息“此场是必需的“,即使模型说:”null = True,Blank = True“。

当我不使用自定义表单,即酵从声明

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

那么一切工作,除了现在我可以有很多选择。在“ModelChoicesField”的文档中,您可以阅读一个短语“请注意,如果需要ModelChoiceField ...”,则不需要暗示ModelChoiceField。

任何想法如何处理这个?

回答

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

值得强调一点:如果您覆盖某个字段,则会覆盖* all *的所有属性,包括是否需要它。 – 2010-04-12 19:23:31

+0

非常感谢您的解释。其实我知道它与'required = False'有关,但是我的语法错误。 – Henri 2010-04-12 19:54:32

相关问题