我在使用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'
有什么想法吗?
答案 0 :(得分:28)
ChoiceField
没有查询集。您正在寻找ModelChoiceField
答案 1 :(得分:6)
如果要从数据库填充下拉列表,我建议您将views.py中单个对象中的所有值传递给模板。你可以这样做: 1]从数据库中获取所有值:
objectlist = ModelName.objects.all()
如果您想在下拉列表中排序列表,请执行以下操作:
objectlist = ModelName.objects.all().order_by('fieldname')
如果你想要清单,请执行以下操作:
objectlist = ModelName.objects.distinct('fieldname')
2]通过此渲染此对象列表'使用模板
return render(request, 'template.html', {'objectlist': objectlist})
3]在模板中使用select标签,在user for循环中迭代对象列表。
<select>
{% for element in objectlist %}
<option value={{ element.id }}>{{ element.name }}
</select>
选项标记中的值取决于您需要在API中处理的内容
答案 2 :(得分:3)
使用 ModelChoiceField Link Here
ChoiceField 不支持queryset
答案 3 :(得分:0)
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>
输出
答案 4 :(得分:0)
在Django 2+中,您可以使用'choices'代替'queryset'