Мог любой объяснять мне сходства и различия Django forms.Form
& forms.ModelForm
?
Формы, созданные из forms.Form
, настраиваются вами вручную. Их лучше использовать для форм, которые не взаимодействуют напрямую с моделями. Например, контактная форма или форма подписки на рассылку, где не обязательно взаимодействовать с базой данных.
Тогда как форма, созданная на основе forms.ModelForm
, будет создана автоматически и впоследствии может быть доработана вами. Лучшие примеры действительно взяты из превосходной документации, предоставленной на сайте Django.
forms.Form
:
Documentation: Объекты формы
Пример обычной формы, созданной с помощью forms.Form
:
from django import forms
class ContactForm(forms.Form):
subject = forms.CharField(max_length=100)
message = forms.CharField()
sender = forms.EmailField()
cc_myself = forms.BooleanField(required=False)
forms.ModelForm
:
Документация: Создание форм из моделей
Прямо из документации:
Если ваша форма будет использоваться для непосредственно добавлять или редактировать модель Django, вы можете использовать
ModelForm
, чтобы избежать дублирования описания вашей модели.
Пример формы модели, созданной с помощью forms.Modelform
:
from django.forms import ModelForm
from . import models
# Create the form class.
class ArticleForm(ModelForm):
class Meta:
model = models.Article
Эта форма автоматически имеет все те же типы полей, что и модель Article
, на основе которой она была создана.
Сходство заключается в том, что они оба генерируют наборы входных данных формы, используя виджеты, и оба проверяют данные, отправленные браузером. Различия заключаются в том, что ModelForm получает определение полей из указанного класса модели, а также имеет методы для сохранения базовой модели в базе данных.