17

我在使用 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'

有任何想法吗?

4

5 回答 5

34

ChoiceField没有查询集。您正在寻找ModelChoiceField

于 2012-08-13T14:35:47.087 回答
7

如果您想从数据库中填充下拉列表,我建议您将单个对象中的所有值从 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] 在模板中使用选择标签,并在用户 for 循环中迭代对象列表。

<select>


{% for element in objectlist %}


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



     </select>

选项标签中的值取决于您需要在 API 中处理的内容

于 2015-04-16T07:55:10.277 回答
3

在此处使用ModelChoiceField 链接

ChoiceField不支持查询集

于 2012-08-13T14:45:52.150 回答
1

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})

客户.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 - 车辆品牌名称列表

于 2019-05-20T11:42:25.387 回答
0

在 Django 2+ 中,您可以使用“选择”而不是“查询集”

于 2020-02-07T20:21:25.010 回答