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

Django - QuerySet - Get count for all determined child objects inside all parent objects

我有这个型号:

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#

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

结果应该是这样的: 笔记本电脑:5 Camera:10 MusicPlayer:1

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

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

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

然后您可以使用 annotate and Count:

检索相关模型的数量
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)