好的,有没有一种方法可以过滤对象,从而只获得具有关联记录的记录。这可能是一个正确的加入吗?
基本上,当在B上使用WHERE子句时,我只想从A中选择B有外键的记录。我是不是让它听起来比实际情况更复杂?我不需要B的记录,只需要A;也许是子查询?
我对Django的查询还比较陌生,只做了一些简单的事情。
你的问题有点模糊,但如果我理解正确,它会像这样工作:
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
。请参阅有关跨越关系的查找的文档。
我的解决方案比我最初想象的要简单得多。我不知道你能这么容易地过滤相关的模型。以下是我最终得到的:
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)