在search_fields
中使用admin.py
时,有没有办法更改搜索结果的排序?
这是我到目前为止所做的:
# models.py
class Book(models.Model):
# ...
name = models.CharField(...)
description = models.TextField(...)
和
#admin.py
class BookAdmin(admin.ModelAdmin):
# ...
search_fields = ('name', 'description')
然后,当我在管理页面中搜索某些内容时,django汇总来自name
和description
的许多结果,并按照我无法找到的顺序返回。我只想在name
之前对description
的结果进行排序。
在django中有没有这样做?
答案 0 :(得分:2)
您可以使用Meta选项指定列表中模型的默认顺序,管理员使用它来对实例进行排序:
class Book(models.Model):
#...
class meta:
ordering = ['name', 'description']
您也可以尝试直接在admin中设置排序:
class BookAdmin(admin.ModelAdmin):
# ...
search_fields = ('name', 'description')
ordering = ['name', 'description']
根据您的评论进行更新:
如果您只想影响结果的顺序,可以截取QuerySet,它会为您带来如下结果:
class BookAdmin(admin.ModelAdmin):
# ...
search_fields = ('name', 'description')
def get_search_results(self, request, queryset, search_term):
queryset, use_distinct = super(BookAdmin, self).get_search_results(request, queryset, search_term)
queryset = queryset.order_by('name', 'description')
return queryset, use_distinct
虽然可以在此过程的后期再次订购该操作的结果,但这将为您提供有序的结果列表。