Создание кастомной формы
Для создания кастомной формы в Django, наследуйте базовый класс forms.Form
и определите в нем нужные поля:
from django import forms
class CustomForm(forms.Form):
custom_field = forms.CharField(label='Custom Label', max_length=100)
Создание кастомного поля
Чтобы создать кастомное поле, наследуйте класс forms.Field
и переопределите методы clean()
и validate()
для реализации необходимой логики валидации и обработки данных:
class CustomField(forms.Field):
def clean(self, value):
value = super().clean(value)
# Кастомная обработка данных
return value
def validate(self, value):
# Кастомная валидация данных
Использование кастомного поля в форме
После создания кастомного поля, его можно использовать в форме:
class CustomForm(forms.Form):
custom_field = CustomField(label='Custom Label')
Кастомная валидация на уровне формы
Для реализации кастомной валидации на уровне формы, определите метод clean()
и вызовите функцию super().clean()
для получения очищенных данных. Затем добавьте логику валидации, вызывая исключение forms.ValidationError
при наличии ошибок:
class CustomForm(forms.Form):
field1 = forms.CharField()
field2 = forms.CharField()
def clean(self):
cleaned_data = super().clean()
field1_data = cleaned_data.get('field1')
field2_data = cleaned_data.get('field2')
# Кастомная валидация на уровне формы
if field1_data and field2_data:
if field1_data == field2_data:
raise forms.ValidationError("Field1 и Field2 не должны быть одинаковыми.")
Вывод кастомных полей и ошибок в шаблоне
Для вывода кастомных полей и ошибок в шаблоне используйте теги {{ form.field.label_tag }}
и {{ form.field.errors }}
:
<form method="post">
{% csrf_token %}
{{ form.field1.label_tag }} {{ form.field1 }} {{ form.field1.errors }}
{{ form.field2.label_tag }} {{ form.field2 }} {{ form.field2.errors }}
<input type="submit" value="Submit">
</form>
Создание кастомных форм и полей в Django 4 позволяет расширять функциональность валидации и обработки данных, а также улучшать взаимодействие с пользователями благодаря более точной обработке ошибок и предоставлению пользовательских сообщений об ошибках.