【发布时间】:2021-09-03 07:37:43
【问题描述】:
我有一个 Django 过滤器,它按预期工作,允许通过选择下拉控件中的项目来过滤列表,但是当它呈现时,下拉控件项目按照它们进入数据库的顺序排列,这也是意料之中。
但是,这对用户不友好,因为很难找到所需的项目。我试图弄清楚如何以 alpha 顺序对下拉控件(composer)中显示的项目列表进行排序。任何帮助将不胜感激,因为我是所有这一切的新手。过滤器代码如下。我想我可能需要操作一个小部件,但不确定......
class PieceFilter(django_filters.FilterSet):
class Meta:
model = Piece
fields = ['composer', 'instrumentation']
exclude = ['title', 'description',
'study_notes', 'score_file', 'purchase_from', 'genre']
过滤器呈现两个用于过滤的下拉控件:“composer”(需要按 alpha 顺序排列)和“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)
【问题讨论】:
-
Piece.composer是ForeignKey吗?你能在作曲家模型中添加默认排序吗? -
是的,Piece.composer 是一个外键。我不知道如何将默认排序添加到作曲家模型,但我会搜索 - 谢谢
-
它没有用。我已经有作曲家订购的清单。它是需要排序的值的默认过滤器下拉控件列表
-
@IainShelvington 我很抱歉!通过向 Composer 模型添加默认排序,它确实可以完美运行。我愚蠢地将它添加到 Pieces 并想知道为什么它不起作用。感谢您的帮助。
标签: python django django-models django-filters