我有这个型号:
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查询,但我得到的只是检索每个订单的计数而不是所有订单的计数。
我知道这可以通过单独查询每个人来轻松完成,但我被要求在一个查询中完成所有操作。
答案 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')
然后,您可以使用annotate和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)