私は抽象モデルを持っています:
class CModel(CParent):
class Meta:
abstract = True
そして、この抽象モデルに基づく 2 つのモデルがあります。
class Model1(CModel):
pass
class Model1_A(models.Model):
model = models.ForeignKey(Model1, related_name="a")
class Model1_A_B(models.Model):
model = models.ForeignKey(Model1_A, related_name="b")
そして2番目:
class Model2(CModel):
def all_obj(self):
...
list = Model2_A_B.objects.filter(model__model__pk=self.pk).all()
...
class Model2_A(models.Model):
model = models.ForeignKey(Model2, related_name="a")
class Model2_A_B(models.Model):
model = models.ForeignKey(Model2_A, related_name="b")
そして今、関数 all_obj() をabstactクラスに移動したいので、Model1でも利用できるようになりますが、Model1には次のようなものが必要です:
list = Model1_A_B.objects.filter(model__model__pk=self.pk).all()
all_obj() を任意のモデル名で機能させるにはどうすればよいですか?
私はこのようなものを思いついた:
list = eval(self.a.all()[:1][0].b.all()[:1][0].__class__.__name__).objects.filter(model__model__pk=self.pk)
しかし、私はこれが正しい方法だとは思いません。それには問題があります。self.a.all()[:1][0]に関連オブジェクトがある場合にのみ機能しますが、これは常に当てはまるとは限りません。