1

我有几个结构非常相似的模型类,所以我想将它们的大部分定义重构为一个抽象的基础模型类。然而,每个模型类中的许多字段至少有一个独特的属性,尽管在其他方面是相似的。例如,考虑:

class ModelA(models.Model):
    id = models.AutoField(db_column='modela_id', primary_key=True)
    label = models.TextField()
    ref = models.ForeignKey('ModelAHelper')

class ModelB(models.Model):
    id = models.AutoField(db_column='modelb_id', primary_key=True)
    label = models.TextField()
    ref = models.ForeignKey('ModelBHelper')

我想做类似的事情:

class MyBaseModel(models.Model):
    id = models.AutoField(db_column=self.class_name.lower()+'_id', primary_key=True)
    label = models.TextField()
    ref = models.ForeignKey(self.class_name+'Helper')

    class Meta:
        abstract = True

class ModelA(MyBaseModel):
    class_name = 'ModelA'

class ModelB(MyBaseModel):
    class_name = 'ModelB'

有任何想法吗?

4

1 回答 1

0

可能有某种方法可以让所有这些工作,但为什么不只是在新类上指定 ref 字段并继续前进呢?你的方法仍然很干。

class MyBaseModel(models.Model):
    label = models.TextField()

    class Meta:
        abstract = True    

class ModelA(MyBaseModel):
    ref = models.ForeignKey('ModelAHelper')

class ModelB(MyBaseModel):
    ref = models.ForeignKey('ModelBHelper')
于 2013-09-15T14:07:26.253 回答