Django форми (forms.ModelForm
та forms.Form
) використовуються для обробки вводу користувача у веб-застосунках. Вони надають зручний спосіб для валідації, обробки та керування введеними даними з HTML-форм у безпечний та структурований спосіб. Ось основні варіанти використання кожного типу форм:
Чому варто використовувати Django форми?
- Валідація даних: Переконайтеся, що введені користувачем дані відповідають певним вимогам (наприклад, формат електронної пошти, максимальна довжина, обов'язкові поля).
- Безпека: Захист від поширених вразливостей, таких як SQL-ін’єкції або міжсайтові скрипти (XSS).
- Легкість у використанні: Спрощення створення та обробки форм з мінімумом коду.
- Інтеграція: Легко інтегрується з моделями та поданнями Django.
У Django вибір між використанням forms.ModelForm
та forms.Form
залежить від того, чи ваша форма безпосередньо прив'язана до бази даних, чи ні. Ось коли використовувати кожну з них:
Використання forms.ModelForm
- Коли форма прив'язана до моделі: Використовуйте
ModelForm
, коли поля форми відповідають полям у моделі бази даних, це автоматично обробляє створення та оновлення екземплярів моделей. - Автоматичне керування полями: Поля форми автоматично генеруються на основі полів моделі, що економить ваш час на їх ручне визначення.
- Валідація: Вбудована валідація автоматично застосовується на основі типів полів моделі.
- Приклад використання: Створення або редагування екземпляра моделі (наприклад, форма реєстрації користувача, де дані безпосередньо мапуються на модель
User
).
from django import forms
from .models import MyModel
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ['field1', 'field2', 'field3'] # Вкажіть поля для включення
Переваги:
- Швидше та лаконічніше для форм, пов'язаних з моделями.
- Автоматично інтегрується з правилами валідації моделі.
- Легко зберігати дані форми у базу даних за допомогою
form.save()
.
Використання forms.Form
- Коли форма не пов'язана з моделлю: Використовуйте
Form
для користувацьких форм, які не відповідають безпосередньо моделі бази даних. - Гнучкість: Ви можете визначити поля, які не залежать від будь-якої моделі, даючи вам більший контроль.
- Приклад використання: Форми пошуку, контактні форми або будь-який сценарій, коли дані форми не повинні зберігатися у базі даних.
from django import forms
class ContactForm(forms.Form):
name = forms.CharField(max_length=100)
email = forms.EmailField()
message = forms.CharField(widget=forms.Textarea)
- Переваги:
- Повністю налаштовувані форми для випадків, що не пов'язані з базою даних.
- Дозволяє використовувати нестандартні комбінації полів або валідації.
Підсумок
| Критерій | `ModelForm` | `Form` |
| ----------------------- | ------------------------------------ | ------------------------------------ |
| **Зв'язок з базою даних** | Прив'язано до моделі | Незалежне від моделі |
| **Опис полів** | Автоматичний, на основі моделі | Визначається вручну |
| **Використання** | CRUD операції з моделями | Користувацькі форми (наприклад, пошук, контакт) |
| **Зручність** | Автоматично інтегрується з моделями | Більша гнучкість |
Рішення
- Використовуйте
ModelForm
, коли хочете заощадити час і мета вашої форми полягає в створенні або оновленні екземпляра моделі. - Використовуйте
Form
, коли вам потрібна повна незалежність від моделей або вам потрібно визначити поля, які не мапуються на поля моделі.
Перекладено з: When to use Simple form or Model form in Django Python?