Django: где хранятся поля внутри экземпляра формы - PullRequest
0 голосов
/ 07 декабря 2010

Предположим, я создал форму django, в которой есть выбор радиоблока:

class PlaylistsForm(forms.Form):
    choices=forms.ChoiceField( widget=forms.RadioSelect(), CHOICES,label="choices")

Если я пытаюсь создать экземпляр формы и выполнить form.choices, я получаю сообщение об ошибке, что экземпляр не имеет атрибута choices.Можете ли вы отослать меня туда, где это объясняет магию создания полей, и, во-вторых, как я могу получить доступ к полям?

РЕДАКТИРОВАТЬ: Чтобы было понятно: я хочу знать почему, учитывая экземпляриз PlaylistsForm, делает print form.choices Я получаю сообщение об ошибке, утверждая, что такого атрибута нет.Какая темная магия происходит за кулисами здесь?

1 Ответ

5 голосов
/ 07 декабря 2010

Предполагается, что CHOICES - это набор опций для поля, изменение относительно простое:

class PlaylistsForm(forms.Form):
    choices=forms.ChoiceField(widget=forms.RadioSelect(),
                              choices=CHOICES,
                              label="choices")

Подробнее см. документацию ChoiceField и документацию choices.

Изменения опубликовать ваше редактирование:

Краткий ответ

Вы, вероятно, путаете свое поле с именем choices и атрибут choices в своем поле choices.

Скажем, у вас есть форма:

my_form = PlaylistsForm()

Вы можете получить доступ к атрибуту choices поля choices следующим образом:

my_form.fields['choices'].choices

Длинный ответ

Я не знал, как делать то, что вы хотели, поэтому я вставил import pdb; pdb.set_trace() сразу после того, как объявил форму, например:

form = PlaylistsForm()
import pdb; pdb.set_trace()

Затем, используя сервер разработки, я открыл URL, который сопоставлялся с представлением с моим новым import pdb; pdb.set_trace() в нем. Переключившись в командную строку, я мог проверить, какие атрибуты и методы существовали в моем объекте формы, в приглашении отладки:

(Pdb) dir(form)

Это показало, что у form есть атрибут fields, поэтому я посмотрел на него:

(Pdb) form.fields

Это показало, что form.fields это dict, со значениями Field объектов, я выбрал поле choices и посмотрел, какие атрибуты у него были:

 (Pdb) dir(form.fields['choices'])

Это показало мне, что form.fields['choices'] имеет атрибут choices:

(Pdb) form.fields['chiices'].choices
[('', '---------'), (1L, My Playlist')]

Это, вероятно, то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...