Редактирование
данных
413
Добавление новых записей
Теперь, когда пользователь может добавлять новые темы, он также захочет добав-
лять новые записи. Мы снова определим URL, напишем новую функцию и шаблон
и создадим ссылку на страницу. Но сначала нужно добавить в
forms .py
еще один
класс.
Класс EntryForm
Мы должны создать форму, связанную с моделью
Entry
, но более специализиро-
ванную по
сравнению с
TopicForm
:
forms.py
from django import forms
from .models
import Topic, Entry
class TopicForm(forms.ModelForm):
...
class EntryForm(forms.ModelForm):
class Meta:
model = Entry
fields = ['text']
labels = {'text': ''}
widgets = {'text': forms.Textarea(attrs={'cols': 80})}
Сначала в команду
import
к
Topic
добавляется
Entry
. Новый класс
EntryForm
на-
следует от
forms.ModelForm
и содержит вложенный класс
Meta
с указанием модели,
на которой он базируется, и поле, включаемое в форму. Полю
'text'
снова назна-
чается пустая надпись
.
В точке
включается атрибут
widgets
.
Виджет
(widget) представляет собой эле-
мент формы HTML: однострочное или многострочное текстовое поле, раскрываю-
щийся список и т. д. Включая атрибут
widgets
, вы можете переопределить виджеты,
выбранные Django по умолчанию. Приказывая Django использовать элемент
forms.
Textarea
, мы настраиваем виджет ввода для поля
'text'
, чтобы ширина текстовой
области составляла 80 столбцов вместо значения по умолчанию 40. У пользователя
будет достаточно места для создания содержательных записей.
URL-адрес для new_entry
Необходимо включить аргумент
topic_id
в URL-адрес для создания новой записи,
потому что запись должна ассоциироваться с конкретной темой. Вот как выглядит
URL,
который мы добавляем в
learning_logs/urls .py
:
urls.py
...
urlpatterns = [
...
# Страница для добавления новой записи
url(r'^new_entry/(?P
\d+)/$', views.new_entry, name='new_entry'),
]