Django管理排序顺序

Lyl*_*ylo 51 django django-models

我已经浏览了http://docs.djangoproject.com上的民意调查教程.

我想知道在编辑民意调查时是否可以在"选择"模型中添加排序顺序,我将如何实现

谢谢

小智 105

class SeminarInline(admin.StackedInline):
    model = Seminar
    extra = 0
    ordering = ('-date',)
Run Code Online (Sandbox Code Playgroud)

为我工作(以上改编自我的模型)它按降序排序

  • 这和@Marcus Whybrow的答案都解决了这个问题。问题是,是否有人希望将默认排序限制为仅管理员视图或其他视图。 (2认同)

小智 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']
Run Code Online (Sandbox Code Playgroud)

这里的last_name是MyModel中的字段。


Mar*_*row 17

您可以Meta向Django模型添加选项,这些选项可以指示它的行为方式.有一个ordering选项可以定义应该对哪个模型属性记录进行排序.

您可以在Django文档中找到元排序选项的文档:

  • 请注意,这会为模型设置默认排序,而不仅仅是为管理员设置。这意味着在不需要订购的地方查询大量项目时,它可能会对性能产生影响。 (5认同)
  • 完美解决方案 示例[here](https://docs.djangoproject.com/en/dev/topics/db/models/#meta-options) (3认同)

Ris*_*nha 14

也有重写的可能性get_ordering(self, request)ModelAdmin,它允许对不区分大小写的排序:

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
Run Code Online (Sandbox Code Playgroud)

  • 好了,您现在添加的`import`提供了新信息。 (3认同)
  • 更简单的示例:按created_on字段降序排列:“ return ['-created_on']” (2认同)

Ber*_*ant 7

如果你想在InlineAdmin中定义订单,django不会为你提供一个通用的解决方案!有一些片段可以让你将这个功能添加到管理员,grappelli皮肤也为你提供这样的功能!


sau*_*i23 5

例如,如果您希望表格按百分比排序:

  1. 转到主应用程序中的 models.py 文件
  2. class Meta:
     abstract = True
     ordering = ['-percentage'] #Sort in desc order
    
    Run Code Online (Sandbox Code Playgroud)
  3. class Meta:
     abstract = True
     ordering = ['percentage'] #Sort in asc order
    
    Run Code Online (Sandbox Code Playgroud)