Заполните форму django с данными из базы данных

У меня есть форма в моих формах .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

Взгляните на этот пример в документации Django:

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

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

Update

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

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)

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

Ресурсы

Ответ 2

Что вам нужно сделать, это выяснить, какой объект вы на самом деле хотите, например. если вы хотите найти книгу под названием "Upvote-if-u-like!" тогда ваш urls.py должен понравиться

urlpatterns = [
path('textshare/<str:slug>',views.extract,name="textshare"),]

теперь, когда кто-то будет искать mybook.com/textshare/upvote-if-u-like!/

это приведет его/ее к views.py, который будет выглядеть как

def extract(request,slug):
    context={}

    obj=bookForm.objects.get(title=slug)
    form=bookModelForm(instance=obj)

    context={'form':form}
    return render(request,'bookfound.html',context)

где bookForm находится в Models.py, а bookModelForm находится в forms.py Счастливого Джангоинга :)