【问题标题】:is a ModelChoiceField always required?是否始终需要 ModelChoiceField?
【发布时间】:2011-02-07 01:49:25
【问题描述】:

我有模特

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

所以我创建了:

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。

知道如何处理吗?

【问题讨论】:

    标签: django forms models


    【解决方案1】:

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

    【讨论】:

    • 值得强调的一点:如果你覆盖一个字段,你会覆盖它的所有属性,包括它是否是必需的。
    • 非常感谢您的解释。实际上我知道这与 'required=False' 有关,但我的语法错误。
    猜你喜欢
    • 1970-01-01
    • 2013-12-21
    • 2011-03-16
    • 2013-02-03
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 2020-10-12
    • 2019-12-18
    相关资源
    最近更新 更多