次のモデルがあると仮定します。
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
。ただし、クエリに使用したい別のクラスでスーパークラスが外部キーとして使用されている場合、これを再現する方法はまだわかりませんでした。