Python 在Django中获取所有相关对象而不知道模型名称

Python 在Django中获取所有相关对象而不知道模型名称,python,django,Python,Django,我有一个抽象模型: class CModel(CParent): class Meta: abstract = True class Model1(CModel): pass class Model1_A(models.Model): model = models.ForeignKey(Model1, related_name="a") class Model1_A_B(models.Model): model = models.Forei

我有一个抽象模型:

class CModel(CParent):

    class Meta:
        abstract = True
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")
基于这个抽象模型有两个模型:

class CModel(CParent):

    class Meta:
        abstract = True
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")
第二:

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()移到Abstract类中,这样它也可以在Model1中使用,但对于Model1,我需要这样的东西:

list = Model1_A_B.objects.filter(model__model__pk=self.pk).all()
list = eval(self.a.all()[:1][0].b.all()[:1][0].__class__.__name__).objects.filter(model__model__pk=self.pk)
如何使所有的_obj()都适用于任何模型名称

我想出了这样的办法:

list = Model1_A_B.objects.filter(model__model__pk=self.pk).all()
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]具有相关对象时才有效,但这并不总是正确的。

正如我从这段代码中看到的,您的所有模型都是相同的,但命名不同

为什么不为建模创建基类并为每个模型创建实例呢


关于all_obj(self),只需将其设置为泛型(全局)

如果希望所有模型都能访问它,为什么不编写泛型函数而不是类方法呢?它只是代码的一部分,这些模型并不完全相同。问题是:对于任何模型名称,我需要获取所有相关对象的所有相关对象。在这种情况下,我建议将函数用作泛型。