我发现了这个
How to properly overwrite clean() method和这个
Can clean and clean\_fieldname methods be used together in Django ModelForm?
但是,如果使用的是泛型类mixins ModelFormMixin,则它的工作方式似乎有所不同。
我的类也是从ProcessFormView派生的。
def form_valid(self, form):是唯一可以覆盖表单处理过程的点吗?
发布于 2021-11-06 19:08:37
您混淆了_view_s和_form_s,例如CreateView使用ModelForm来创建对象。但是,不必让视图构造ModelForm,您可以自己指定这样的表单,然后将其作为form_class传递给视图。
例如,假设您有一个带有Category字段的name模型,并且您希望验证Category的名称都是用小写写的,您可以定义一个ModelForm来完成这个任务:
from django import forms
from django.core.exceptions import ValidationError
class CategoryForm(forms.ModelForm):
def clean_name(self):
data = self.cleaned_data['recipients']
if not data.islower():
raise ValidationError('The name of the category should be written in lowercase')
return data
class Meta:
model = Category
fields = ['name']现在,我们可以将该ModelForm作为CategoryCreateView的形式插入
from django.views.generic import CreateView
class CategoryCreateView(CreateView):
model = Category
form_class = CategoryForm因此,验证应该在ModelForm中完成,然后您可以在CreateView、UpdateView等中使用该表单。
https://stackoverflow.com/questions/69864946
复制相似问题