Django:对下拉列表中的项目进行排序(通过field_order?)

时间:2020-06-11 21:04:37

标签: django forms django-templates

我正在使用模板的下拉菜单。我确实希望该下拉列表按字母顺序排列,并且不知道该如何获得。

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', ]行无效。

怎么了?

2 个答案:

答案 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'))
相关问题