假设对于下面的"floorfield",我想添加字段验证以达到以下效果:如果用户提交的楼层字段值小于 0,请重新提示用户提交大于零的楼层字段值。
我已经通读了 django 文档,寻找了教程,并且我正在用我的点头在墙上留下一个凹痕,试图弄清楚如何实现上述行为。
class Amodel(...):
floorfield = integerfield()
class Amodel(CreateView):
model = Amodel
form_class = modelform_factory(Amodel, fields=("floorfield",))
不幸的是,进行自定义(例如特殊字段验证)需要您制作自己的表单并将其作为参数传递给modelform_factory
。你可以在这里阅读它
class AModelForm(forms.Form):
floorfield = forms.FloatField()
def clean(self):
if self.floorfield <= 0
#return your errors here
#return cleaned form here
并在您的 CreateView 中调用它,如下所示:
form_class = modelform_factory(Amodel, form=AModelForm)
然后,当您发布到创建视图并通过form_valid()
时,表单的.clean()
方法将触发。
自定义表单定义为modelform_factory form
参数,并覆盖clean_floorfield
以便自动进行验证。
https://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-a-specific-field-attribute
或者,您只需将floorfield
定义为PositiveIntegerField
模型字段。
https://docs.djangoproject.com/en/dev/ref/models/fields/#positiveintegerfield