让我解释一下。我有两个表是另一个抽象表的子类。抽象表与名为
Foo
. 这个
related_name
是动态设置的。代码如下所示:
class Foo(models.Model):
...
class Parent(models.Model):
foo = models.ForeignKey(
Foo,
on_delete=models.CASCADE,
related_name='%(app_label)s_%(class)s_related'
)
...
def bar(self):
print('bar')
class Meta:
abstract = True
class ChildOne(Parent):
...
class ChildTwo(Parent):
...
因此,相关名称成为
'myapp_childone_related'
,和
'myapp_childtwo_related'
.
现在,假设我想打电话给
bar()
方法中的所有对象
ChildOne
和
ChildTwo
与
福
对象。不过有一个问题,我想用
福
模型。目前,我是这样做的:
class Foo(models.Model):
...
def call_bar(self):
references = ('childone', 'childtwo')
for ref in references:
children = getattr(self, f'myapp_{ref}_related').all()
for child in children:
child.bar()
这很好,但老实说,感觉有点黑客,尤其是当处理两个以上的儿童班。有没有一个更好的,更能解决这个问题的方法?
编辑:我决定不提之前我想打电话给
条形图()
方法中的类方法
福
因为我认为这个问题没有必要。然而,Daneil Roseman的回答建议创建一个类列表,这是一个很好的解决方案,但是它在class方法中不起作用,因为类在模块中还没有被定义。所以在这次编辑中提到了这一点。