django - 如何允许通过自定义 list_display 字段在 Django admin 中进行排序,该字段没有 DB 字段也没有可注释

标签 django django-admin

我有一个自定义 list_display 字段,它负责我的一个管理页面中的一列整数。

我需要让工作人员根据它进行排序。

如果整数表示某个 DB 字段的计数/平均值/等,则有一个解决方案可以解决这个问题,这对我来说并非如此。

[该案例的解决方案在这里:Django admin: how to sort by one of the custom list_display fields that has no database field
]

任何想法如何在不实际为值创建和维护数据库字段的情况下实现这种排序?

最佳答案

排序是在数据库引擎中完成的(在 order by 子句中),所以我认为除非你在模型中具体化一个字段,否则你将无法实现你想要的。计算状态此时不可排序(至少在管理界面中不可排序,如果您使用自己的界面,则可以使用 extra )。

如果问题出在过滤上,您可以编写自定义 FilterSpec (似乎没有在任何地方记录,但 SO 有一个 good example )。

但是对于在管理员中进行排序,恐怕您唯一的选择是物化字段。

编辑:

嗯...

你可以尝试一些东西。 It is possible (尽管我认为它没有正式记录在任何地方)更改 ModelAdmin 使用的查询集。如果您的计算字段足够简单,可以嵌入查询本身,您可以执行以下操作:

class BlahAdmin(admin.ModelAdmin):
    ... Whatever definitions ...

    def queryset(self, request):
        return Blah.objects.extra(select={'computed': "count(field_x)"})

这可能会奏效。虽然它未经测试。

关于django - 如何允许通过自定义 list_display 字段在 Django admin 中进行排序,该字段没有 DB 字段也没有可注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2647632/

相关文章:

django - 在生产环境中执行彻底的 Django 模型迁移的明智方法是什么?

python - Django 管理员注册内联用户个人资料管理员的问题

django - 从 github 检索私有(private)存储库提交

Django + PostgreSQL : creating a database (what privileges to grant)

python - 更改模型管理表单默认值

python - ModelAdmin 中的 Django csrf_token

python - 如何使用 Django 管理员的 ContentTypes 在两个应用程序之间访问 ManyToManyField?

python - 在 django admin 中按自定义列表显示字段列表过滤器

python - settings.py 中的 Static_Root 重定向到应用程序中的静态文件夹而不是基本根目录

Django:加密密码到遗留(不是auth_user)表