我有一种情况,用户可以在html表单上单击复选框字段“field_enable”,并且不错的jQuery操作将显示另一个字段“fielda”,供用户输入更多数据。当“field_enable”为选中,我想要求用户也填写“fielda”。如果未选中“field_enable”,则应允许用户提交表单而不会出现错误。

我希望所有错误都显示在字段上方的错误列表中,而不是整个表单的form.errors列表中(这就是为什么我不使用表单的clean()方法的原因)。因此,我想出了以下代码。

启用/禁用逻辑效果很好。选中“field_enable”时,用户必须填写“fielda”,而未选中时,用户会通过。然而,当检查框,要求用户填写详细信息,即使他们在值填写“FIELDA”他们窗台得到验证错误“需要FIELDA”。这违背了期望。

有谁对为什么每次检查“field_enable”时“fielda”总是无法通过验证提出任何建议?

class MyForm(forms.ModelForm):

    def clean_fielda(self):
        cleaned_data = self.cleaned_data
        if cleaned_data.get("field_enable"):
            raise forms.ValidationError("Fielda is required")
        return cleaned_data['fielda']

模型的一个例子
class MyModel(models.Model):
    field_enable = models.BooleanField(default=False)
    fielda = models.CharField(max_length=128, blank=True, null=True)

任何帮助深表感谢!

最佳答案

如果您在中选中“field_enable”,并且没有“field_a”的值,那么您想提出一个验证错误。像这样(您缺少“field_a”存在检查):

class MyForm(forms.ModelForm):

    def clean_fielda(self):
        cleaned_data = self.cleaned_data
        if cleaned_data.get("field_enable") and not cleaned_data.get('field_a'):
            raise forms.ValidationError("Fielda is required")
        return cleaned_data['fielda']

10-06 07:38