是一个总是需要的ModelChoiceField?

时间:2010-04-12 15:43:56

标签: django forms models

我有一个模特

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 = None'。如果文章是翻译,那么'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 =是的,空白=真“。

当我不使用自定义表格时,即发出声明

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

然后一切正常,除了现在我有很多选择。在“ModelChoicesField”的文档中,您可以阅读短语“请注意,如果需要ModelChoiceField ......”,这意味着不需要ModelChoiceField。

知道怎么处理这个吗?

1 个答案:

答案 0 :(得分:24)

如果您要覆盖表单,则需要将字段设置为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