所以,我在以下情况下苦苦挣扎:
考虑模型:
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为Multi-table继承创建了一个隐式的向后关系,我想知道是否有更简单的查询。
谢谢, 乔治
答案 0 :(得分:1)
当你可以简单地执行此操作时,是否有理由只想通过A实例获取Child对象:
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))
答案 1 :(得分:1)
好吧,我自己想出来了。
显然,如果模型没有孩子,django认为pk为null。
所以,可以使用:
all_bChild_models = a_instance.b_models.filter(bchild__pk__isnull=False)
这将返回所有b模型指向它的b模型。