How to allow sorting in the Django admin by a custom list_display field, which doesn't have a DB field nor annotatable
我有一个自定义列表显示字段,它负责管理页面中的整数列。
我需要允许员工根据它进行分类。
如果整数表示某个db字段的count/average/etc,这是一个如何实现的解决方案,我不这么认为。
[该案例的解决方案如下:django admin:如何按没有数据库字段的自定义列表显示字段之一排序]
我有什么想法可以在不创建和维护值的db字段的情况下实现这种排序?
排序是在DB引擎上完成的(在ORDERBY子句中),所以我认为除非您具体化模型中的一个字段,否则您将无法实现您想要的。此时计算状态不可排序(至少不在管理界面中,如果您使用自己的界面,则可以使用额外的界面)。
如果问题是过滤,您可以编写一个自定义的filterspec(它似乎没有在任何地方记录,但是有一个很好的例子)。
但对于管理中的排序,恐怕您唯一的选择是物化字段。
编辑:
六羟甲基三聚氰胺六甲醚。。。
你可以试试看。有可能(尽管我认为在任何地方都没有正式的文档记录)更改modeladmin使用的查询集。如果计算字段足够简单,可以嵌入查询本身,则可以执行以下操作:
1 2 3 4 5 | class BlahAdmin(admin.ModelAdmin): ... Whatever definitions ... def queryset(self, request): return Blah.objects.extra(select={'computed':"count(field_x)"}) |
这可能有效。但它还没有经过测试。