在单个Django管理模型中,是否可以聚合相关对象的字段?
例如,我有一个“学生”对象,它具有指向“测试”对象的外键。 “测试”对象具有一个“得分”字段。
我能否对所有学生的测试得分进行聚合,并将其放置在管理显示列表属性中?
在单个Django管理模型中,是否可以聚合相关对象的字段?
例如,我有一个“学生”对象,它具有指向“测试”对象的外键。 “测试”对象具有一个“得分”字段。
我能否对所有学生的测试得分进行聚合,并将其放置在管理显示列表属性中?
例如,您可以:
class FixtureAdmin(admin.ModelAdmin):
list_display = ["id", "title", "date", "num_fixture_metas_count"]
def get_queryset(self, request):
qs = super(FixtureAdmin, self).get_queryset(request)
return qs.annotate(num_fixture_metas=Count('fixturemeta'))
def num_fixture_metas_count(self, obj):
return obj.num_fixture_metas
num_fixture_metas_count.short_description = 'Fixture Count'
num_fixture_metas_count.admin_order_field = 'num_fixture_metas'
然而,据我所知,使用这种方法无法通过单击管理界面上的这些字段进行排序,因为将.annotate()
中的num_fixture_metas
添加到list_display
中会导致缺少字段错误。
https://docs.djangoproject.com/zh-hans/3.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display https://docs.djangoproject.com/zh-hans/3.2/topics/db/aggregation/
get_queryset()
而不是queryset()
。https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_queryset - ivy