通过其他模型的任何引用进行过滤

时间:2014-01-28 12:34:10

标签: django django-models

假设我们有以下两个模型:

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}},但这不是一个有效的语法。我怎么写呢?

2 个答案:

答案 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可让您根据NULLNOT NULL条件过滤记录。