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#
最后三个具有与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屋!