I am having problems using a ChoiceField to create a drop down list of values in the database. Here is the snippet of code
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())
The #subject.... line works, but when I use the line ChoiceField(queryset....) I get the following error.
__init__() got an unexpected keyword argument 'queryset'
Any ideas?
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With