假设我有以下模型:
class SomeSuperClass(models.Model):
...
class SomeSubClassA(SomeSuperClass)
...
class SomeSubClassB(SomeSuperClass)
...
class SomeConnector(models.Model):
reference = models.ForeignKey(SomeSuperClass, on_delete=models.CASCADE)
...
现在我想要的是在迭代对象时,SomeConnector
我总是想立即拥有相应子类的对象,而不是超类的对象。例如
for sc in SomeConnector.objects.all():
# somehow get the correct subclass of this `reference` field here,
# assuming it to be callable under sc.reference_correct_subclass:
print(sc.reference_correct_subclass.__class__.__name__)
可以产生例如:
'SomeSubClassA'
'SomeSubClassB'
'SomeSubClassA'
'SomeSubClassA'
但是永远不应该使用超类的对象。
我知道django-model-utils,我可以通过直接查询超类来做类似的事情,如下所示:
SomeSuperClass.objects_inheritance.select_subclasses()
附在哪里。objects_inheritance
_ 但是,当超类用作我想用于查询的另一个类中的外键时,我还无法弄清楚如何重现这一点。InheritanceManager
SomeSuperClass