查找Django中字段唯一的对象计数

Joh*_*hnd 4 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(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()它们.

Aym*_*ieh 9

你能试一下吗:

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)