Django管理记录的排序顺序

94
我已经按照http://docs.djangoproject.com上的投票教程进行了跟随。
我想知道在编辑投票时是否可以为“选择”模型添加排序顺序。 如果可以,我该如何完成?
7个回答

183
class SeminarInline(admin.StackedInline):
    model = Seminar
    extra = 0
    ordering = ('-date',)

这对我有用(以上修改自我的模型)

它按日期降序排列了


3
这个回答和@Marcus Whybrow的回答都解决了这个问题。问题是如果有人想将默认排序限制在仅管理员视图中,还是其他视图也一样。 - Csaba Toth

25

同时还有一种可能性可以覆盖ModelAdminget_ordering(self, request)方法,从而实现不区分大小写的排序:

from django.db.models.functions import Lower

class MyModelAdmin(ModelAdmin):
    list_display = ('name',)
    search_fields = ['name']

    def get_ordering(self, request):
        return [Lower('name')]  # sort case insensitive

我认为 return [Lower('name')] 应该改为 return [self.name.lower()] - LostMyGlasses
1
@LostMyGlasses 不,你绝对不想降低字段名称,而是要降低用于排序的值。 - Risadinha
3
好的,你现在添加的 import 提供了新的信息。 - LostMyGlasses
2
更简单的例子:按照创建时间降序排序:return ['-created_on'] - Dashdrum

24

您可以向Django模型添加Meta选项,这些选项可以决定其行为。其中有一个ordering选项,用于定义记录应按哪个模型属性排序。

您可以在Django文档这里找到有关元订单选项的文档:


这不是你要找的答案吗? - Marcus Whybrow
我能看到Lylo在说什么。我有同样的问题。[a,b,c,d]。我希望管理员能够重新排列数据,而不依赖于某个字段。例如[d,c,a,b]。 - Lee
5
完美解决方案!示例在这里 - Roger_S
7
请注意,这将设置模型的默认排序方式,不仅适用于管理页面。这意味着在不需要排序的地方查询大量项目时可能会对性能产生影响。 - Thierry J.

23

以下是4.0文档中的方法

# mymodel/admin.py

from django.contrib import admin
from . import models

# admin.site.register(models.MyModel)

@admin.register(models.MyModel)
class MyModelAdmin(admin.ModelAdmin):
    ordering = ['-last_name']

这里的last_name是在MyModel内部的字段。


谢谢,我必须像你的示例一样注册模型。否则,过滤器/排序也会出现在我的其他模型中,这会引发错误,因为其他模型上缺少字段。 - alexrogo

9
例如,如果您想按百分比对表格进行排序:
  1. Go to models.py file in your mainapp
  2. class Meta:
     abstract = True
     ordering = ['-percentage'] #Sort in desc order
    
  3. class Meta:
     abstract = True
     ordering = ['percentage'] #Sort in asc order
    

我相信 OP 的意思是在管理界面(“编辑投票”时)对模型项进行排序;将模型设为抽象将阻止其在管理中注册。 - Don R

7
如果您想在InlineAdmin中定义顺序,Django没有提供一种通用的解决方案!有一些代码片段可以帮助您向管理界面添加此功能,也可以使用grappelli皮肤提供的此功能!请参考这里这里

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接