我有一个类似这样的模型:
class Input(models.Model):
details = models.CharField(max_length=1000)
user = models.ForeignKey(User)
class Case(Input):
title = models.CharField(max_length=200)
views = models.IntegerField()
class Argument(Input):
case = models.ForeignKey(Case)
side = models.BooleanField()
用户可以针对每个案例提交多个参数。我想说有多少用户提交了side=true
论据。我的意思是如果 1 个用户有 10 个参数而另一个用户有 2 个参数(都是
side=true
)我希望计数是 2,而不是 12。
更新:
我在 Case 对象上使用这些方法:
def users_agree(self):
return self.argument_set.filter(side=True).values('user').distinct()
def users_disagree(self):
return self.argument_set.filter(side=False).values('user').distinct()
我的模板代码调用 count()
在他们。
最佳答案
你能试一下吗:
Argument.objects.filter(side=True).values('case__user').distinct().count()
我认为它可以满足您的需求。它发出一个 SQL 查询:
SELECT COUNT(DISTINCT "example_input"."user_id") FROM "example_argument" INNER JOIN "example_case" ON ("example_argument"."case_id" = "example_case"."input_ptr_id") INNER JOIN "example_input" ON ("example_case"."input_ptr_id" = "example_input"."id") WHERE "example_argument"."side" = True
编辑:
对于
this_case
,获取所有argument.side为True的用户:Argument.objects.filter(case__id=this_case.id, side=True).values('user').distinct()
关于django - 查找 Django 中字段唯一的对象计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/845717/