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