[英]Django group up by foreign keys
所以我有两个模型:
class Product(models.Model):
name = models.CharField(_('Name'), max_length=200)
class Like(models.Model):
product = models.ForeignKey(Product, related_name='likes', on_delete=models.DO_NOTHING)
user = models.ForeignKey(settings.AUTH_USER_MODEL, blank=True, null=True, related_name='likes', on_delete=models.DO_NOTHING)
我想要获得base
产品(<5个赞), standard
产品(<10个赞)和premium
产品的总数。
我不知道如何计算每个产品的FK,然后将它们分组。 最好在1个查询中。
python
3.6, django
2.1, posgtresql
我不知道在单个查询中应该如何完成该操作,但是您可以尝试以下操作:
from django.db.models import Count
qs = Product.objects.annotate(num_likes=Count('like'))
base_products = qs.filter(num_likes__lt=5)
standard_products = qs.filter(num_likes__gte=5, num_likes__lt=10)
premium_products = qs.filter(num_likes__gte=10)
此代码为您提供了3个QuerySet
对象以及所需的数据。
如果您想要一个数据库查询(它仍然包含查询中的两个表),但又不介意将数据加载到python列表中而不是查询集(需要更多的内存,甚至更多的时间),那么可以尝试:
from django.db.models import Count
qs = Product.objects.annotate(num_likes=Count('like'))
base_products = []
standard_products = []
premium_products = []
for p in qs:
if p.num_likes < 5:
base_products.append(p)
elif p.num_likes < 5:
standard_products.append(p)
else:
premium_products.append(p)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.