Django查询关系行为

时间:2014-04-24 18:37:28

标签: django django-queryset

好的是有一种过滤对象的方法,这样你才能获得带有相关记录的记录。这是一个正确的加入吗?

基本上,我只想从B中选择一个B的记录,而B在B上使用WHERE子句。我觉得它听起来比它复杂吗?我不需要B的记录,只需A;也许是一个子查询?

我对Django的查询相对较新,我只是做了一些更简单的事情。

2 个答案:

答案 0 :(得分:1)

你的问题有点模糊,但如果我理解正确的话就会这样:

class A(models.Model):
    pass

class B(models.Model):
    a = models.ForeignKey(A)
    some_field = models.IntegerField()

a.filter(b__some_field=5).distinct()

JOINs b some_field上的两个表格和过滤条件distinct()。然后a确保只返回唯一的{{1}}。请参阅lookups that span relationships上的文档。

答案 1 :(得分:0)

我的解决方案比我最初的想法简单得多。我不知道你可以轻松地过滤相关模型。这就是我最终得到的结果:

class A(models.Model):
    pass

class B(models.Model):
    a = models.ForeignKey(A)
    location = models.ForeignKey(Location)

a.filter(b__location=request.user.profile.location)