Auto | arch-x1: 2026-06-05 13:29:15
This commit is contained in:
@@ -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` сохраняет объект модели.
|
||||
|
||||
Reference in New Issue
Block a user