Заполните форму Django с данными из базы данных в представлении - PullRequest
17 голосов
/ 25 января 2011

У меня есть форма в моем forms.py, которая выглядит следующим образом:

from django import forms

class ItemList(forms.Form):
     item_list = forms.ChoiceField()

Мне нужно заполнить item_list некоторыми данными из базы данных. При генерации в HTML item_list должен выглядеть примерно так:

<select title="ItemList">
   <option value="1">Select Item 1</option>
   <option value="2">Select Item 2</option>
</select>

Значения параметров в моем операторе выбора будут меняться почти каждый раз, поскольку переменная в запросе часто будет меняться, генерируя новые результаты.

Что мне нужно поместить в view.py, а также в мои файлы шаблонов, чтобы заполнить ItemList значениями из базы данных?

1 Ответ

29 голосов
/ 25 января 2011

Посмотрите на этот пример в документации Django:

В принципе, вы можете использовать ключевое слово queryset для объекта Field., чтобы получить строки из вашей базы данных:

class BookForm(forms.Form):
    authors = forms.ModelMultipleChoiceField(queryset=Author.objects.all())

Обновление

Если вам нужно поле выбора динамической модели, вы можете передать свой идентификатор элемента вконструктор формы и соответствующим образом скорректируйте набор запросов:

class ItemForm(forms.Form):

    # here we use a dummy `queryset`, because ModelChoiceField
    # requires some queryset
    item_field = forms.ModelChoiceField(queryset=Item.objects.none())

    def __init__(self, item_id):
        super(ItemForm, self).__init__()
        self.fields['item_field'].queryset = Item.objects.filter(id=item_id)

PS Я не тестировал этот код и не уверен в вашей точной настройке, но надеюсь, что основная идея найдется.

Ресурсы:

...