django admin - 更改search_fields结果排序

时间:2014-07-05 21:35:38

标签: python django django-admin

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汇总来自namedescription的许多结果,并按照我无法找到的顺序返回。我只想在name之前对description的结果进行排序。

在django中有没有这样做?

1 个答案:

答案 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

虽然可以在此过程的后期再次订购该操作的结果,但这将为您提供有序的结果列表。