Django - QuerySet - 获取所有父对象中所有已确定的子对象的计数

时间:2016-08-17 17:12:12

标签: python django 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检索所有订单的每个子对象的总计数,并按每个子对象分组。

结果应如下所示: 的笔记本:5 摄像头:10 MusicPlayer:1

我尝试过使用不同的django查询,但我得到的只是检索每个订单的计数而不是所有订单的计数。

我知道这可以通过单独查询每个人来轻松完成,但我被要求在一个查询中完成所有操作。

1 个答案:

答案 0 :(得分:2)

将related_name添加到模型中:

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')

然后,您可以使用annotateCount检索相关模型的数量:

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)