【问题标题】:django clean_field that references other fields引用其他字段的 django clean_field
【发布时间】:2011-03-23 12:33:24
【问题描述】:

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

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

启用/禁用逻辑效果很好。当“field_enable”被选中时,用户必须填写“fielda”,当它未被选中时,用户传递。但是,当检查框时,要求用户填写更多信息,即使它们填写“Fielda”的值,它们Sill获取验证错误“必需的Fielda”。这出乎意料。

是否有人对为什么“fielda”总是在检查“field_enable”时验证失败有任何建议

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)

非常感谢任何帮助!

【问题讨论】:

    标签: django validation forms


    【解决方案1】:

    如果选中“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']
    

    【讨论】:

    • 哇,我不敢相信它这么简单。我一定是盯着它看太久了:)我试试看;感谢您的帮助!
    猜你喜欢
    • 2013-10-06
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2012-02-12
    • 2012-11-21
    相关资源
    最近更新 更多