抽象基础模型类(Django)中的变量?

时间:2013-09-15 13:32:52

标签: django django-models

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

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'

有什么想法吗?

1 个答案:

答案 0 :(得分: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')