Django注释:ModelB条目的数量与ModelA的关系不多

时间:2016-10-23 13:52:37

标签: django django-models django-queryset django-orm django-aggregation

在这种特殊情况下,ModelA是默认的Django models.User

ModelB实现为:

class ModelB(models.Model):
    user = models.ManyToManyField(User)
    #some other stuff

1。对于每个ModelB记录,计算与其没有关系的用户记录

我设法使用:

ModelB.objects.all().annotate(user_count=User.objects.count()-Count('user'))

它有效,但感觉就像一个黑客。有没有更好的方法(仍在使用annotate())?

2。过滤

我修改了我之前使用当前登录用户进行过滤的查询,因此我可以为每个用户显示自定义内容。无论登录用户如何,我打算保持与查询#1中相同的user_count值:

ModelB.objects.filter(
    user=request.user
).annotate(
    user_count=User.objects.count()-Count('user')
)

编辑:在annotate之后完成过滤时,按预期工作:

ModelB.objects.annotate(
    user_count=User.objects.count()-Count('user')
).filter(
    user=request.user
)

仍在寻找比User.objects.count()-Count('user')更好的内容来为每个ModelB记录计算不相关的用户记录。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我不认为您的代码正在按照您的想法行事。 Var1 Var1_Structured 125 Hollywood St. 125 Hollywood St. 125 Hllywood St. 125 Hollywood St. 125 Hollywood St 125 Hollywood St. Target Store Target Store Trget Stre Target Store Target. Store Target Store T argetStore Target Store Walmart Walmart Walmart Inc. Walmart Wal marte Walmart 不会返回数据库中的用户总数,只返回该Count('user')个对象的相关用户数。要使用这个解决方案(你自己说 - 这是一个非常糟糕的方式来做IMO),你应该使用ModelB

如果我理解你的意愿,那么这种方法应该给你你想要的号码:

User.objects.count()