Auto | arch-x1: 2026-06-05 13:29:15

This commit is contained in:
Dmitry
2026-06-05 13:29:15 +03:00
parent 8e206fed3a
commit 1acb87897f
6 changed files with 763 additions and 36 deletions
@@ -8,7 +8,7 @@ tags:
- validation
- modelform
created: 2026-05-30
updated: 2026-05-31
updated: 2026-06-05
title: "Django: Работа с формами и CUD"
source:
- '[[lec5-django_cud_form.pdf]]'
@@ -43,6 +43,8 @@ class BlogForm(forms.ModelForm):
}
```
В `ModelForm` модель и поля задаются во внутреннем классе `Meta`. `fields` показывает, какие поля модели попадут в форму. `exclude` можно использовать наоборот: указать, какие поля не включать.
---
## Жизненный цикл формы в представлении
@@ -107,6 +109,8 @@ class RegisterForm(forms.Form):
return cleaned_data
```
Для проверки связи между полями используют общий `clean()`. Например, "Пароль" и "Повтор пароля" нельзя нормально проверить через `clean_password()`, потому что нужно сравнить два поля.
---
## Generic Editing Views (CBV для CUD)
@@ -188,3 +192,39 @@ class BlogDeleteView(DeleteView):
При `POST` Django сверяет токен из формы с токеном пользователя. Если токена нет или он неправильный, запрос отклоняется.
Короткое правило: во все HTML-формы с `method="post"` добавлять `{% csrf_token %}`.
## Простыми словами для экзамена
Форма Django делает три вещи:
1. Описывает поля.
2. Валидирует входные данные.
3. Даёт очищенные данные в `cleaned_data`.
Основные поля:
- `CharField` — строка;
- `IntegerField` — целое число;
- `BooleanField``True/False`;
- `ChoiceField` — выбор из списка;
- `EmailField` — email;
- `DateField` — дата;
- `FileField` — файл.
`widget` управляет HTML-представлением поля, а не типом данных. Например, строковое поле можно показать как пароль:
```python
password = forms.CharField(widget=forms.PasswordInput)
```
Подсказка к полю задаётся через `help_text`:
```python
email = forms.EmailField(help_text="Введите рабочую почту")
```
После `form.is_valid()`:
- `form.cleaned_data` содержит нормальные Python-значения;
- `form.errors` содержит ошибки;
- `form.save()` у `ModelForm` сохраняет объект модели.