关于Django QuerySet的内部连接查询

时间:2012-11-11 18:49:43

标签: django postgresql django-queryset

我在django中有这些数据模型:

class User(models.Model):
     type = models.CharField()

class Tmp1(models.Model):
     var1 = models.ForeignKey(User)

class Tmp2(models.Model):
     var2 = models.ForeignKey(Tmp1)

class Tmp3(models.Model):
     user = models.ForeignKey(User)
     var3 = models.ForeignKey(Tmp2)

我希望有一个Tmp3查询集,用于选择Tmp3 Tmp3.var3.var2.var1.id等于Tmp3.user.id.的实例

我知道我应该如何在PostgreSQL中使用InnerJoin,但我不知道如何使用Django查询集。

2 个答案:

答案 0 :(得分:1)

根据我的理解,您希望获得Tmp3user属性与Tmp1表中相关用户匹配的对象(对于当前Tmp3对象) - 听起来你可以使用F expressions

from django.db.models import F
Tmp3.objects.filter(var3__var2__var1=F('user'))

答案 1 :(得分:-1)

尝试以下方法:

object_q = 1
tmp3_pk = Tmp3.objects.get(pk=object_q).user.pk
queryset = Tmp3.objects(var3__var2__var1__pk=tmp3_pk)

__(双下划线)将引用相关模型的属性。

您也可以直接引用对象:

object_q = 1
tmp3_user = Tmp3.objects.get(pk=object_q).user
queryset = Tmp3.objects(var3__var2__var1=tmp3_user)

在此处查看跨相关对象执行查询的完整详细信息: https://docs.djangoproject.com/en/dev/topics/db/queries/#related-objects