【发布时间】:2011-09-23 21:52:24
【问题描述】:
假设我有一个模型:
class Foo(models.Model):
...
以及另一个基本上提供每个用户关于Foo的信息的模型:
class UserFoo(models.Model):
user = models.ForeignKey(User)
foo = models.ForeignKey(Foo)
...
class Meta:
unique_together = ("user", "foo")
我想生成一个 Foos 的查询集,但基于 user=request.user 使用(可选)相关的 UserFoo 进行注释。
所以它实际上是LEFT OUTER JOIN on (foo.id = userfoo.foo_id AND userfoo.user_id = ...)
【问题讨论】:
-
可能性是两个查询:
UserFoo.objects.filter(user=request.user).select_related("foo")然后Foo.objects.exclude(userfoo__user=request.user)但正在寻找其他可能性 -
最终目标是什么/用例是什么?
-
@Dan 我希望从问题中可以清楚地看到:UserFoo 包含有关 Foo 的每个用户信息,我想显示一个 Foo 的列表,该列表用 UserFoo 的 request.user 的用户信息注释
-
为什么在上面的查询中使用
exclude而不是filter?查找与用户相关的Foos 不是重点吗? “注释”是什么意思?您在这里的使用令人困惑,因为 Django 对注释有一个非常具体的定义,特别是“描述要计算的聚合”。 -
exclude的原因是UserFoo过滤器已经给了我与用户相关的过滤器;我想要与用户无关的Foos,因为它是左外连接
标签: django