我有一个类似这样的模型:
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()
Run Code Online (Sandbox Code Playgroud)
用户可以根据具体情况提交许多参数.我希望能够说出有多少用户提交了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()
Run Code Online (Sandbox Code Playgroud)
我的模板代码调用count()它们.
你能试一下吗:
Argument.objects.filter(side=True).values('case__user').distinct().count()
Run Code Online (Sandbox Code Playgroud)
我认为它做你想要的.它发出一个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
Run Code Online (Sandbox Code Playgroud)
编辑:
对于this_case,获取其argument.side为True的所有用户:
Argument.objects.filter(case__id=this_case.id, side=True).values('user').distinct()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4204 次 |
| 最近记录: |