Вы используете общие представления на основе классов, которые имеют много встроенных функций. Лучший источник для их поиска - этот .
Если вы посмотрите нанапример, CreateView
(Edit -> CreateView), вы увидите, что метод get()
, который является первым методом, вызываемым, когда вы просто выбираете страницу с помощью GET, просто вызывает render_to_response()
с данными контекста, полученными из get_context_data()
.
А внутри get_context_data()
мы добавляем контекстную переменную form
к контексту, который присвоен get_form()
.и т. д.
То же самое с методом post()
, где сначала извлекается form
, проверяется на достоверность и, если не действителен, метод form_invalid()
визуализирует шаблон с form
в егоcontext.
Вы можете следовать тому же с UpdateView
и DeleteView
, они очень похожи.Большая часть кода обработки форм на самом деле происходит из класса FormMixin
.
Когда вы создаете свои собственные представления, подклассифицируя общие представления Django, вы обнаружите, что иногда вы не можете использовать представление, но вы можете использоватьmixins (например, FormMixin
или ModelFormMixin
).
Таким образом, form
в вашем шаблоне - это ModelForm
для Author
модели, которую вы указали в общих представлениях.Представление автоматически генерирует эту форму из модели, используя modelform_factory
с полями, которые вы указали с помощью fields
.Так как он добавлен как ключ 'form'
к контексту, используемому для визуализации шаблона, вы можете получить к нему доступ с помощью {{ form }}
.{{ form.as_table }}
отобразит HTML для этой формы в <table>
, как описано здесь .
Если вам не нравится, как выглядит форма, и вы хотите настроить некоторые поля (и не можете сделать это, просто изменив шаблон), вам нужно будет создать собственную форму, сообщитепосмотрите на это, установив атрибут form_class
и удалив атрибут fields
(поля будут указаны в вашей форме), как описано @drew в своем ответе.