在这种特殊情况下,ModelA 是默认的 Django 模型。用户
ModelB 实现为:
class ModelB(models.Model):
user = models.ManyToManyField(User)
#some other stuff
1.对于每条ModelB记录,统计与其没有关系的User记录
我设法使用:
ModelB.objects.all().annotate(user_count=User.objects.count()-Count('user'))
它有效,但感觉就像一个黑客。有没有更好的方法来做到这一点(同时仍在使用annotate()
)?
2.带过滤
我修改了之前的查询,以使用当前登录的用户进行过滤,这样我就可以为每个用户显示自定义内容。user_count
无论登录用户如何,我都打算保持与查询 #1 中相同的值:
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
。
感谢您的帮助!