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