Формы Django. Форма по сравнению с формами. ModelForm

Мог любой объяснять мне сходства и различия Django forms.Form & forms.ModelForm?

70
задан ROMANIA_engineer 16 August 2017 в 15:50
поделиться

2 ответа

Формы, созданные из 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, на основе которой она была создана.

102
ответ дан 24 November 2019 в 13:26
поделиться

Сходство заключается в том, что они оба генерируют наборы входных данных формы, используя виджеты, и оба проверяют данные, отправленные браузером. Различия заключаются в том, что ModelForm получает определение полей из указанного класса модели, а также имеет методы для сохранения базовой модели в базе данных.

13
ответ дан 24 November 2019 в 13:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: