是一个总是需要的ModelChoiceField?

Hen*_*nri 11 forms django 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)
Run Code Online (Sandbox Code Playgroud)

如果文章是原始文章,那么'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
    .
    .
Run Code Online (Sandbox Code Playgroud)

现在,当我应用所有这些似乎工作正常,但当我没有选择'父文章'时,我在管理员中收到一条错误消息,声明"此字段是必需的",即使模型说:"null = True,Blank =真".

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

class ArticleAdmin(admin.ModelAdmin):
#    form = ArticleAdminForm
    .
    .
Run Code Online (Sandbox Code Playgroud)

一切都运转,除了现在我有很多选择.在"ModelChoicesField"的文档中,您可以阅读短语"请注意,如果需要ModelChoiceField ......",这意味着不需要ModelChoiceField.

知道怎么处理这个吗?

Mar*_*vin 26

如果要覆盖表单,则需要将字段设置为不需要的字段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
Run Code Online (Sandbox Code Playgroud)

  • 值得强调的一点:如果你覆盖一个字段,你覆盖*所有*它的属性,包括它是否是必需的。 (2认同)