1

所以,我在以下情况下苦苦挣扎:

考虑模型:

class A(models.Model):
    foo = models.IntegerField(default=0)

class B(models.Model):
    a_models = models.ForeignKey('A', related_name='b_models')
    bar = models.IntegerField(default=0)

class bChild(B):
    bla = models.IntegerField(default=0)

如果我有一个 A 的实例,a_instance,并且我想检索与它有关系的 B 类的所有实例,我可以使用

all_b_models = a_instance.b_models.all()

我的问题是:如果我只想检索也有 bChilds 的那些怎么办:

all_bChild_models = a_instance.b_models.filter(???)

我应该在“???”中输入什么?

我没有找到任何文档。我认为有效的一件事是使用:

??? = pk__in=bChild.objects.all().values_list('pk')

但是,由于 django 为多表继承创建了隐式向后关系,我想知道是否有更简单的查询。

谢谢,豪尔赫

4

2 回答 2

2

嗯,我自己想通了。

显然,如果模型没有孩子,django 认为 pk 为空。

因此,可以使用:

all_bChild_models = a_instance.b_models.filter(bchild__pk__isnull=False)

这将返回所有有 bChild 模型指向它的 b 模型。

于 2012-12-06T08:30:01.987 回答
1

当您可以简单地执行以下操作时,是否有理由仅通过 A 实例获取 bChild 对象:

result = bChild.objects.filter(a_models = a)

您的方法行不通,您需要一个平面列表来按 pk 过滤:

all_bChild_models = a_instance.b_models.filter(pk__in = bChild.objects.values_list('pk', flat=True))
于 2012-12-05T16:45:43.940 回答