Django ChoiceField从数据库值填充

Oli*_*Oli 16 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())
Run Code Online (Sandbox Code Playgroud)

#subject ....行有效,但是当我使用行ChoiceField(queryset ....)时,我收到以下错误.

__init__() got an unexpected keyword argument 'queryset'
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Chr*_*att 30

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

  • 如果该字段是可选的,则显示该方式,将表单上的字段设置为"required = True"以将其删除. (2认同)

小智 7

如果要从数据库填充下拉列表,我建议您将views.py中单个对象中的所有值传递给模板.你可以这样做:1]从数据库中获取所有值:

objectlist = ModelName.objects.all()
Run Code Online (Sandbox Code Playgroud)

如果您想在下拉列表中排序列表,请执行以下操作:

objectlist = ModelName.objects.all().order_by('fieldname')
Run Code Online (Sandbox Code Playgroud)

如果你想要distinctlist,请执行以下操作:

objectlist = ModelName.objects.distinct('fieldname')
Run Code Online (Sandbox Code Playgroud)

2]传递此渲染这个'对象列表'与模板

return render(request, 'template.html', {'objectlist': objectlist})
Run Code Online (Sandbox Code Playgroud)

3]在模板中使用选择标记,并在用户循环中迭代对象列表.

<select>


{% for element in objectlist %}


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



     </select>
Run Code Online (Sandbox Code Playgroud)

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