Django 管理员,显示相关模型的聚合值

发布于 2024-12-02 19:34:45 字数 135 浏览 0 评论 0原文

是否可以在单个 Django 管理模型中聚合相关对象中的字段。

例如,我有一个学生对象,它具有与测试对象的 FK。测试对象有一个“分数”字段。

我可以汇总所有学生测试的分数并将其放入管理 display_list 属性中吗?

Is it possible, within a single Django admin model, to aggregate fields from related objects.

For example, I have a Student Object that has a FK to a Test Object. The test object has a "score" field.

Can I aggregate the scores across all Student's Tests and place it in the admin display_list attribute?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

枯叶蝶 2024-12-09 19:34:45

例如,您可以:

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_metaslist_display 导致缺少字段错误。

https://docs.djangoproject.com/ en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display
https://docs.djangoproject.com/en/dev/topics/db/聚合/

You can, for example:

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'

However, AFAIK, you cannot click sort within the admin on these fields via this method, as adding num_fixture_metas from .annotate() to the list_display results in a missing field error.

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display
https://docs.djangoproject.com/en/dev/topics/db/aggregation/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文