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