Как перезаписать 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 и т.д.