假设我们有以下两个模型:
class A(models.Model):
...
class B(models.Model):
a = models.ForeignKey(A)
value = models.IntegerField(db_index=True)
我可以找到A
引用的B
的任何实例B.value=123
A.objects.filter(b__value=123)
使用A
。但是如何在没有任何其他条件的情况下找到任何B
实例引用的A.objects.filter(b)
实例?我想写{{1}},但这不是一个有效的语法。我怎么写呢?
答案 0 :(得分:1)
我没有测试它,因为我周围没有Django,但我想这个应该可以做到这一点:
class B:
a = models.ForeignKey(A, related_name='bObjects')
您可以找到A类的所有对象,这些对象至少由一个B引用,使用:
A.objects.filter(bObjects__isnull=False)
如果您获得A对象的副本,请在distinct()
filter
答案 1 :(得分:1)
如果我没有误解,你正在寻找isnull
A.objects.filter(b__isnull=False)
b__
是class A
的后向引用,因为class A
中有一个到class B
的ForeignKey。当你以反向关系使用它时,你使用小写的类名。isnull
可让您根据NULL
或NOT NULL
条件过滤记录。