查找Django中字段唯一的对象计数
我有一个这样的模型:查找Django中字段唯一的对象计数,django,Django,我有一个这样的模型: 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(I
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
参数
我的意思是,如果一个用户有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
编辑:
对于这种情况,获取argument.side为True的所有用户:
Argument.objects.filter(case__id=this_case.id, side=True).values('user').distinct()
仔细想想,这可能应该在Case对象中完成。比如“在这种情况下,告诉我有多少用户站在哪一边”,我添加了另一个查询来满足您的新需求。你能试试吗?名称错误:名称“本案”没有定义是的,你说的是“本案秀……”。将此_case替换为您希望其argument.side为True的用户的case对象。我将在case对象的实例上调用此函数,因此我认为不需要指定case。我希望您在代码中没有实际使用“case”Python关键字。我不知道Python有关键字case。你能给我看一下这方面的文件吗?