在Django中,我应该在哪里添加modelform_工厂的自定义字段验证代码,该工厂使用基于类的通用视图显示给用户?

在Django中,我应该在哪里添加modelform_工厂的自定义字段验证代码,该工厂使用基于类的通用视图显示给用户?,django,django-forms,django-views,Django,Django Forms,Django Views,假设对于下面的floorfield,我想添加字段验证,以达到以下效果: 如果用户提交的楼层面积值小于0,则重新提示用户提交大于零的新楼层面积值 我已经阅读了django的文档,寻找了一些教程,我正试图找出如何实现上述行为 class Amodel(...): floorfield = integerfield() class Amodel(CreateView): model = Amodel form_class = modelform_factory(Amodel,

假设对于下面的floorfield,我想添加字段验证,以达到以下效果: 如果用户提交的楼层面积值小于0,则重新提示用户提交大于零的新楼层面积值

我已经阅读了django的文档,寻找了一些教程,我正试图找出如何实现上述行为

class Amodel(...):
    floorfield = integerfield()

class Amodel(CreateView):
    model = Amodel
    form_class = modelform_factory(Amodel, fields=("floorfield",))

您可以将自定义表单定义为modelform\u工厂表单参数,并覆盖clean\u floorfield,以便自动进行验证

或者您只需将floorfield定义为PositiveIntegerField模型字段


不幸的是,进行自定义(如特殊字段验证)需要创建自己的表单,并将其作为参数传递给modelform_工厂。 你可以读到它


然后,当您发布到“创建”视图时,表单的.clean方法将触发,并且它将表单传递到“有效”。

我将在哪里放置clean\u floorfield函数?在Afield的自定义表单中?我认为最简单的方法是使用PositiveIntegerField。看起来这正是你想要的。我是否需要在clean中进行任何其他调用,以确保任何默认表单和字段验证也发生?是的,你也需要调用父级clean。和
class AModelForm(forms.Form):
    floorfield = forms.FloatField()
    def clean(self):
        if self.floorfield <= 0
            #return your errors here
        #return cleaned form here
form_class = modelform_factory(Amodel, form=AModelForm)