对Django过滤器下拉控件的内容进行排序



我有一个Django过滤器,它按预期工作,允许通过在下拉控件中选择项目来过滤List,但当它被呈现时,下拉控件项目按照它们输入数据库的顺序,这也是预期的。

然而,这对用户来说并不友好,因为很难找到想要的物品。我正试图弄清楚如何按字母顺序对下拉控件(composer(中显示的项目列表进行排序。任何帮助都将不胜感激,因为我是这方面的新手。筛选器代码如下。我想我可能需要操作一个小部件,但不确定。。。

class PieceFilter(django_filters.FilterSet):
class Meta:
model = Piece
fields = ['composer', 'instrumentation']
exclude = ['title', 'description',
'study_notes', 'score_file', 'purchase_from', 'genre']

筛选器呈现两个用于筛选的下拉控件:"composer"(需要按字母顺序(和"instrumentation"。在模板上,以下代码呈现一个按钮,用于从下拉控件中搜索所选项目。

<form method="get">
{{myFilter.form}}
<button class="btn btn-primary" type="submit">Search</button>
</form>

正在使用的视图:

def library(request):
pieces = Piece.objects.all().order_by('composer__name', 'instrumentation')
p = Paginator(pieces, 10)
print('NUMBER OF PAGES')
print(p.num_pages)
page_num = request.GET.get('page', 1)
try:
page = p.page(page_num)
except EmptyPage:
page = p.page(1)
myFilter = PieceFilter(
request.GET, queryset=pieces)
pieces = myFilter.qs
piece_count = pieces.count()
context = {'myFilter': myFilter,
'piece_count': piece_count, 'pieces': pieces}
return render(request, 'video/library.html', context)

对于自定义订购,您可以使用ModelChoiceFilter

文件:https://django-filter.readthedocs.io/en/stable/ref/filters.html#modelchoicefilter

from django_filters import ModelChoiceFilter
class PieceFilter(FilterSet):
composer = ModelChoiceFilter(queryset=Composer.objects.all().order_by('name'))
class Meta:
model = Piece
fields = ['composer', 'instrumentation']

最新更新