首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为clean_fieldname覆盖clean和ModelFormMixin

如何为clean_fieldname覆盖clean和ModelFormMixin
EN

Stack Overflow用户
提问于 2021-11-06 14:39:53
回答 1查看 68关注 0票数 0

我发现了这个

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):是唯一可以覆盖表单处理过程的点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-06 19:08:37

您混淆了_view_s和_form_s,例如CreateView使用ModelForm来创建对象。但是,不必让视图构造ModelForm,您可以自己指定这样的表单,然后将其作为form_class传递给视图。

例如,假设您有一个带有Category字段的name模型,并且您希望验证Category的名称都是用小写写的,您可以定义一个ModelForm来完成这个任务:

代码语言:javascript
复制
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的形式插入

代码语言:javascript
复制
from django.views.generic import CreateView

class CategoryCreateView(CreateView):
    model = Category
    form_class = CategoryForm

因此,验证应该在ModelForm中完成,然后您可以在CreateViewUpdateView等中使用该表单。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69864946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档