【问题标题】:Django admin site column headers sort by values not alphabetical?Django 管理站点列标题按不按字母顺序排列的值?
【发布时间】:2018-02-18 08:37:30
【问题描述】:

当单击列标题时,如何使 Django 管理站点严格按值的字母顺序排序?下面的 column2 是一个外键。

MyAdmin(admin.ModelAdmin):
    list_display = ('column1', 'column2')

单击此处的 column2 标题应按字母顺序对更改列表进行排序,但不是?

column2
b
a
c

or 

column2
c
a
b

是输出。

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    您提供的信息(到目前为止)不足以给您一个直接的答案。但是根据您所说的,我怀疑您面临的问题如下:

    Django 管理员按字母顺序对“字符串”进行排序(ascdesc 取决于当前状态),但是当列是外键时,它按 id 排序,即使它显示的是“字符串”,您通过模型上的 __str__(self): 方法指定。

    由于排序是在数据库中完成的,据我所知,如果不编辑 queryset,您将无法进行排序(查看此答案以查看示例:How to allow sorting in the Django admin by a custom list_display field, which doesn't have a DB field nor annotatable)。

    【讨论】:

    • column2 是外键。
    • 好的,有道理。所以我的回答解释了为什么你会看到这种行为(这是预期的行为)并指出可能的解决方案。
    【解决方案2】:

    这应该是默认行为。也许您之前单击过另一个列标题,然后它添加了column2 作为第二个排序参数?您可以检查管理 URL 并查看给出了哪些排序参数(如果您不知道如何理解该 URL,也可以将其粘贴到此处)。

    我能想到的另一个版本是行值实际上不是abc,而是一些默认情况下未正确排序的 unicode 内容(即通常a, b, ä 是通常默认排序a, ä, b,而实际上在爱沙尼亚字母表中,第一个排序是正确的)。要解决这个问题,请查看 Django 模型上的 collation options

    【讨论】:

    • 这是有用的信息。
    猜你喜欢
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多