Django ChoiceField从数据库值填充

时间:2012-08-13 14:34:49

标签: django choicefield

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

有什么想法吗?

5 个答案:

答案 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>

输出

VMS - Vehicle Brand Name Lists

答案 4 :(得分:0)

在Django 2+中,您可以使用'choices'代替'queryset'