Как перезаписать clean и clean_fieldname для ModelFormMixin

Я нашел вот это
. Как правильно перезаписать метод clean() и это
Можно ли использовать методы `clean` и `clean_fieldname` вместе в Django ModelForm?
но кажется, что это работает по-другому, если использовать общие миксины классов ModelFormMixin.
Мой класс также является производным от ProcessFormView.
. Является ли def form_valid(self, form): единственной точкой, где я могу переписать процесс обработки формы?

Вы путаете view и form. Например, 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 и т.д.

Вернуться на верх