我试图通过父对象访问子对象,因为我想根据对象的类型执行不同的操作。我有:
#models.py
class A(models.Model):
...
class B(A):
field1 = models.CharField(...)
...
class C(A):
field2 = models.IntegerField(...)
我可以执行2个for循环并完成我想要的:
for obj in B.objects.all():
if field1 == 'something':
do some operation
for obj in C.objects.all():
if field2 == 5:
do some other operation
但是我在想,是不是可以用1 for循环来实现,并通过父循环访问子循环?
for obj in A.objects.all():
if obj.b and obj.b.field1 == 'something':
do some operation
elif obj.c and obj.c.field2 == 5:
do some other operation
我还认为select_related可能可以做到这一点,但它说它只适用于ForeignKey
。
此外,我希望在不使用django-model-utils或django-polymorphic等其他应用程序的情况下完成此操作,因为我觉得应该有一个简单的查询操作来完成此操作。
2条答案
按热度按时间qyyhg6bp1#
你可以像在最后的for循环中那样从parent中获取子对象,但你还需要检查parent的子对象是否存在,如下所示:
您也可以使用Q对象将其组合到单个查询中:
这将返回类A的对象
jljoyd4f2#
hasattr
将返回正确的子示例True
,否则返回False
。请注意,hasattr
参数的类名是小写的。