问题
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?
回答1:
ChoiceField
doesn't have a queryset. You're looking for ModelChoiceField
回答2:
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
回答3:
Use the ModelChoiceField Link Here
ChoiceField doesn't support queryset
回答4:
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
来源:https://stackoverflow.com/questions/11936470/django-choicefield-populated-from-database-values