在哪里,我应该为在 Django 中使用基于泛型类的视图向用户显示的modelform_factory添加自定义字段验证



假设对于下面的"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

最新更新