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(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/

相关文章:

django - 在Django模板中动态获取列表项

Django 简单搜索表单

python - Django 模型表单集工厂和表单

django - FactoryBoy/Django - OneToOneField 重复键错误

django模板行多个项目

python - Django:只有在 try except block 中导入才会导致 ImportError

django:在不同时间进行测试

mysql - Geodjango和Innodb,混合innodb和myisam模型

django - 如何在Django中添加简单的延迟任务?

python - 我如何告诉我的 ModelAdmin 的过滤器在默认情况下不显示所有记录?