0

私は抽象モデルを持っています:

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]に関連オブジェクトがある場合にのみ機能しますが、これは常に当てはまるとは限りません。

4

2 に答える 2

0

このコードからわかるように、すべてのモデルは同じですが、名前が異なります。

Modeling の基本クラスを作成し、各モデルにインスタンスを作成してみませんか?

all_obj(self) に関しては、ジェネリック (グローバル) にするだけです

于 2013-10-09T07:08:57.897 に答える