我有一个自定义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)"})
这可能会奏效.虽然没经过测试.