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')
检索相关模型的数量
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)
我有这个型号:
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')
检索相关模型的数量
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)