我正在使用模板的下拉菜单。我确实希望该下拉列表按字母顺序排列,并且不知道该如何获得。
template.html :
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
<fieldset>
{{ form|crispy }}
</fieldset>
<div>
<button type="submit">OK</button>
</div>
</form>
上下文来自 views.py :
def my_view(request):
if request.method == 'POST':
form = MyForm(request.POST)
if form.is_valid():
…
return render(request, 'xxx/template.html', {'form': form})
该表单在 forms.py 中定义:
from django import forms
from .models import Project
class MyForm(forms.Form):
project = forms.ModelChoiceField(queryset=Project.objects)
field_order = ['name', ]
models.py :
class Project(models.Model):
name = models.CharField()
…
documentation谈论field_order
。 form.py中的field_order = ['name', ]
行无效。
怎么了?
答案 0 :(得分:1)
您可以通过将查询更改为
来对其进行排序。 queryset=Project.objects.order_by("name")
或者您需要反向订购...order_by("-name")
。
答案 1 :(得分:1)
文档说明这是表单字段的顺序
例如:
class MyForm(forms.Form):
project = forms.somefield
name = forms.somefield
field_order = ['name', ]
将在项目之前以表格形式显示名称
您想要的是ModelChoiceField
的更改排序顺序,这意味着您应该更改查询集参数
forms.ModelChoiceField(Project.objects.order_by('name'))