django admin - 更改 search_fields 结果排序
有没有办法在你的 admin.py
文件中使用 search_fields
时,改变搜索结果的排序呢?
这是我目前的代码:
# 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 中,有办法做到这一点吗?
1 个回答
3
你可以通过Meta选项来设置一个模型的默认排序,这样管理员在查看实例时就会按照这个顺序排列:
class Book(models.Model):
#...
class meta:
ordering = ['name', 'description']
你也可以直接在管理员界面中设置排序:
class BookAdmin(admin.ModelAdmin):
# ...
search_fields = ('name', 'description')
ordering = ['name', 'description']
根据你的评论更新:
如果你只想影响结果的顺序,可以在获取结果的查询集中进行拦截,像这样:
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
虽然这个操作的结果在后续过程中可能会再次被排序,但这就是能给你一个有序结果列表的方法。