使用Django进行条件字段/表单验证
我正在尝试使用Django创建一个条件字段。“Approved”是一个复选框,而“Date_of_approval”是一个日期字段。“Member”是定义了“clean”方法的类。
我希望一旦勾选了复选框,日期字段就变成必填项。使用下面的代码时,我遇到的错误是‘NoneType’对象没有属性‘get’。
请帮我确认一下这段代码应该放在哪里。我把它放在了模型页面里,但每次放到表单页面时,它都无法识别这些字段。
approved = models.BooleanField()
date_of_approval = models.DateField(blank=True, null=True,)
def clean(self):
cleaned_data = super(Member, self).clean()
approved = cleaned_data.get("approved")
date_of_approval = cleaned_data.get("date_of_approval ")
if approved and date_of_approval :
if approved and not date_of_approval :
raise forms.ValidationError("Invaid input")
return self.cleaned_data
1 个回答
0
cleaned_data
是用在表单验证中的,而不是模型验证中。如果你想在模型验证时获取清理过的字段值,只需要引用 self
:
from django.core.exceptions import ValidationError
...
class Member(models.Model):
# field definitions as above
def clean(self):
if self.approved and not self.date_of_approval:
raise ValidationError("Approved members must have a date of approval")
或者你可以修正你的表单,让它能找到相关的字段,但在你的问题中没有足够的信息来判断你遇到的问题是什么。