Django 如何使用QuerySet API执行分组查询,该API返回模型实例,而不是字典?
在执行分组查询时,是否可以创建模型实例列表而不是字典列表?当模型实例是字典时,我将失去该实例的功能Django 如何使用QuerySet API执行分组查询,该API返回模型实例,而不是字典?,django,django-models,Django,Django Models,在执行分组查询时,是否可以创建模型实例列表而不是字典列表?当模型实例是字典时,我将失去该实例的功能 class Product(AbstractProduct): name = models.CharField(max_length=200, null=True, blank=True) description = models.CharField(max_length=10000, null=True, blank=True) is_published =
class Product(AbstractProduct):
name = models.CharField(max_length=200, null=True, blank=True)
description = models.CharField(max_length=10000, null=True, blank=True)
is_published = models.BooleanField(default=False)
picture = models.CharField(max_length=250, null=True, blank=True)
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='products', blank=True, null=True,on_delete=models.CASCADE)
@property
def is_parent(self):
return self.structure == self.PARENT
class Enrollment(models.Model):
product = models.ForeignKey("catalogue.Product", related_name='enrollments', blank=True,on_delete=models.CASCADE)
user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='enrollments', blank=True,on_delete=models.CASCADE)
如果我使用values()函数执行GROUP BY查询,我将无法在模板标记中调用is_parent()函数此查询将获取所有已发布的
产品
对象,并将使用用户数进行注释
Product.objects.filter(
is_published=True
).annotate(
enrolled_user_count=Count('enrollments__user')
).order_by(
'-enrolled_user_count'
)
groupby
的结果不是模型实例-它不包含表的特定行,只包含某些列的不同值(在简单情况下),与整个表行(模型实例)以及所有匹配行的聚合值无关
但是,如果您想添加每个产品注册的唯一用户数,您可以添加count()
直接在product
上使用distinct
子句在注册\uu客户机上进行聚合:
Product.objects.filter(
is_published=True
).annotate(
enrolled_user_count=Count('enrollments__user', distinct=True)
).values(
'title', 'description', 'enrolled_user_count'
).order_by(
'-enrolled_user_count'
)
你能分享你正在使用的模型和当前查询吗?你正在使用哪一个数据库?你只想得到一个带有用户数量注释的产品列表吗?是的,这就是我试图做的。获取产品列表以及注册使用该产品的用户数的注释
Product.objects.filter(
is_published=True
).annotate(
enrolled_user_count=Count('enrollments__user', distinct=True)
).values(
'title', 'description', 'enrolled_user_count'
).order_by(
'-enrolled_user_count'
)