Django ChoiceField populated from database values

南楼画角 提交于 2019-11-30 11:21:00

ChoiceField doesn't have a queryset. You're looking for ModelChoiceField

if you want to populate dropdown list from database, I'll recommend you to pass all the values in single object from views.py to your template. You can do it this way: 1] fetch all the values from database:

objectlist = ModelName.objects.all()

if you want sorted list in dropdown list, Do this:

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

if you want distinctlist, do this:

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

2] Pass this render this 'objectlist' with template

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

3] In template use a select tag , and in user for loop to iterate over the objectlist.

<select>


{% for element in objectlist %}


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



     </select>

value in option tag depends on what you need to process in your API

Use the ModelChoiceField Link Here

ChoiceField doesn't support queryset

view.py :- This is my view.py file. And create below code.

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>

Output

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!