Django-QuerySet-获取所有父对象中所有确定的子对象的计数 [英] Django - QuerySet - Get count for all determined child objects inside all parent objects

查看:81
本文介绍了Django-QuerySet-获取所有父对象中所有确定的子对象的计数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个模型:

class Order(models.Model):
    #bunch of fields#

class Laptop(models.Model):
    #bunch of fields#

class Camera(models.Model):
    #bunch of fields#

class MusicPlayer(models.Model):
    #bunch of fields#

最后三个具有与Order类关联的外键。 我需要通过QuerySet检索所有订单的每个子对象的总计数,并按每个订单分组。

The last three have a foreign key associated to the Order class. I need to retrieve via a QuerySet the summed count for each child object for all orders, grouped by each one of them.

结果应为看起来像这样:
笔记本电脑:5
摄像头:10
MusicPlayer:1

The result should look something like this: Laptop:5 Camera:10 MusicPlayer:1

我曾经尝试过使用不同的django查询,但是我所要做的只是获取每个订单的计数而不是所有订单的计数。

I've tried using different django queries but all I get to is retrieving the count for each order instead the count for all orders.

我知道,只需查询即可轻松完成此操作

I know this could be easily done by just querying each one separately but I was requested to do all in one query.

推荐答案

为您的模型添加related_name:

Add related_name to your models:

class Laptop(models.Model):
    order = models.ForeignKey(Order, related_name='laptops')

class Camera(models.Model):
    order = models.ForeignKey(Order, related_name='cameras')

class MusicPlayer(models.Model):
    order = models.ForeignKey(Order, related_name='music_players')

然后您可以使用注释计数

from django.db.models import Count

orders = Order.objects.annotate(laptops_count=Count('laptops'), cameras_count=Count('cameras'), music_players_count=Count('music_players'))
print(orders.laptops_count)
print(orders.cameras_count)
print(orders.music_players_count)

这篇关于Django-QuerySet-获取所有父对象中所有确定的子对象的计数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆