Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找Django中字段唯一的对象计数_Django - Fatal编程技术网

查找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。你能给我看一下这方面的文件吗?