有条件地需要 Django 表单字段

Posted

技术标签:

【中文标题】有条件地需要 Django 表单字段【英文标题】:Django form field required conditionally 【发布时间】:2012-06-13 14:56:42 【问题描述】:

我希望有一个基于将布尔值设置为TrueFalse 的有条件需要的字段。

如果is_company 设置为True,我应该返回什么设置required =True

class SignupFormExtra(SignupForm):
    is_company = fields.BooleanField(label=(u"Is company?"), 
                                     required=False)
    NIP = forms.PLNIPField(label=(u'NIP'), required=False)

    def clean(self):
        if self.cleaned_data.get('is_company', True):
            return ...?
        else:
            pass

【问题讨论】:

【参考方案1】:

查看文档中关于Cleaning and validating fields that depend on each other 的章节。

文档中给出的示例可以很容易地适应您的场景:

def clean(self):
    cleaned_data = super(SignupFormExtra, self).clean()
    is_company = cleaned_data.get("is_company")
    nip = cleaned_data.get("NIP")
    if is_company and not nip:
        raise forms.ValidationError("NIP is a required field.")
    return cleaned_data

【讨论】:

@arie 提供的链接还介绍了如何通过将 raise 语句替换为 self._errors["NIP"] = self.error_class(["This is an required field. "]) @Seth 感谢您的评论!这真的很有帮助!

以上是关于有条件地需要 Django 表单字段的主要内容,如果未能解决你的问题,请参考以下文章

有条件地显示和隐藏表单字段并设置字段值

覆盖 Django 表单字段的名称 attr

如何根据 Django 下拉菜单中的选择显示和隐藏表单字段

带有两个提交按钮的 Django 表单。 . .一个需要字段,一个不需要

Django 向导表单中的条件表单字段

Django Crispy 表单根据需要设置模型字段