【发布时间】:2017-03-05 08:39:26
【问题描述】:
在这种特殊情况下,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。带过滤
我将之前的查询修改为使用当前登录的用户进行过滤,这样我就可以为每个用户显示自定义内容。无论登录用户如何,我都打算保持与查询 #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 记录的非相关用户记录。
感谢您的帮助!
【问题讨论】:
标签: django django-models django-queryset django-orm django-aggregation