1

非常によく似た構造を持ついくつかのモデル クラスがあるため、それらの定義のほとんどを抽象基本モデル クラスにリファクタリングしたいと考えています。ただし、各モデル クラスの多くのフィールドには、類似しているにもかかわらず、少なくとも 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 フィールドを指定して先に進まないのはなぜでしょうか? あなたのアプローチはまだかなりDRYです。

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 に答える