python - 有条件地只需要 Django 模型表单中的一个字段

标签 python django forms validation model

是否可以根据同一表单中的另一个字段是否已填写来使某个字段成为有条件必填的字段?

If field1 has no data, but field2 does
    form is valid.

If field1 has no data and field2 has no data
    form is invalid

不寻找任何 javascript 解决方案。我觉得它应该用 django 表单来解决,但不太确定如何最好地解决它。

最佳答案

如果您知道验证将应用于此类的所有对象,您也可以使用模型来执行此操作。要在表单级别使用以下内容,请使用 cleaned_data。以下是使用 ValidationError 的 Django 文档中的示例:

class Article(models.Model):

    status = models.CharField(max_length=75, blank=False, null=False)
    pub_date = models.CharField(max_length=75, blank=False, null=False)

    def clean(self):
        # Don't allow draft entries to have a pub_date.
        if self.status == 'draft' and self.pub_date is not None:
            raise ValidationError('Draft entries may not have a publication date.')
        # Set the pub_date for published items if it hasn't been set already.
        if self.status == 'published' and self.pub_date is None:
            self.pub_date = datetime.date.today()

引用:Model Instance Clean , Django Validators

这是一个表单示例:

class SimpleForm(forms.ModelForm):

    def clean(self):
        cleaned_data = super(SimpleForm, self).clean()  # Get the cleaned data from default clean, returns cleaned_data
        field1 = cleaned_data.get("field1")
        field2 = cleaned_data.get("field2"),

        if not field1 and not field2:
            raise forms.ValidationError('Please fill in both fields.')

        return cleaned_data

引用:Form & Field Validation

关于python - 有条件地只需要 Django 模型表单中的一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2151966/

相关文章:

python - 如何查找 Pyspark 中列中值最大的行名称

python - Tkinter:窗口打不开

javascript - 单击按钮时 Ajax 从 Django 1.9 代码中获取新值

asp.net - 如何在 ASP.Net 中执行 <form method ="get"> 搜索表单?

forms - Symfony 2 使用一对多数据库关系的嵌入式表单

python - 如何以恒定步长填充数组元素之间的间距,并将两个这样的数组与主要和次要优先级组合起来?

Python正则表达式: pattern with re. ASCII仍然可以匹配unicode字符?

python - Django:通过外键将两个表连接到第三个表?

Django 多对多显示值,而不是对象

python - 在没有辅助类的 Python Pylons Controller 中处理和显示错误的最简单方法