Django ChoiceField заполняется из значений базы данных

У меня возникают проблемы с использованием ChoiceField для создания выпадающего списка значений в базе данных. Вот фрагмент кода

from django import forms
from testplatform.models import ServiceOffering

class ContactForm(forms.Form):

    subject = forms.ChoiceField(queryset=ServiceOffering.objects.all())
    #subject = forms.ModelMultipleChoiceField(queryset=ServiceOffering.objects.all())

Строка #subject.... работает, но когда я использую строку ChoiceField (queryset....), я получаю следующую ошибку.

__init__() got an unexpected keyword argument 'queryset'

Любые идеи?

Ответ 1

ChoiceField не имеет набора запросов. Вы ищете ModelChoiceField

Ответ 2

если вы хотите заполнить выпадающий список из базы данных, я рекомендую вам передать все значения в одном объекте из views.py в ваш шаблон. Вы можете сделать это следующим образом: 1] выберите все значения из базы данных:

objectlist = ModelName.objects.all()

если вы хотите отсортировать список в выпадающем списке, сделайте следующее:

objectlist = ModelName.objects.all().order_by('fieldname')

если вы хотите выделить список, сделайте следующее:

objectlist = ModelName.objects.distinct('fieldname')

2] Пропустите этот визуализацию этого "objectlist" с помощью шаблона

return render(request, 'template.html', {'objectlist': objectlist})

3] В шаблоне используйте тег select и в элементе пользователя для цикла для итерации по списку объектов.

<select>


{% for element in objectlist %}


<option value={{ element.id }}>{{ element.name }}



     </select>

значение в теге параметра зависит от того, что вам нужно обработать в вашем API

Ответ 3

Используйте ModelChoiceField Ссылка здесь

ChoiceField не поддерживает запрос

Ответ 4

view.py: - это мой файл view.py. И создайте ниже код.

def add_customer(request):
    objectlist = Vehicle.objects.values('brand_name').distinct().order_by('brand_name')
    if request.method == 'POST':
        form = CustomerForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/show-customers')
    else:
        form = CustomerForm()
    return render(request, 'add-customer.html', {'form':form, 'objectlist':objectlist})

Customer.html

<select name="prefer_car_model" id="id_prefer_car_model" required>
                <option value="0" selected disabled> Select Car model </option>
                {% for obj in objectlist %}
                <option value="{{ obj.brand_name }}">{{ obj.brand_name }} </option>
                {% endfor %}
            </select>

Выход

VMS - Vehicle Brand Name Lists