如何将Django模型拆分为多个继承自第一个

时间:2017-01-19 17:11:05

标签: django inheritance

我在我的应用程序中广泛使用了Django模型。我想创建另一个继承该模型的模型,以便我可以在整个代码中继续使用原始模型,但将字段移动到新模型

我有:

class MyModel(models.Model):   
   field1 =...  
   field2=... 
   field3=... 

我想将field3移动到新模型:

class MyModel2(MyModel):
   field3=...

然后我想将field3不为null的MyModel实例变为MyModel2实例。

代码将继续引用MyModel,但在某些特殊情况下,我会改用MyModel2。这可能吗?可取?有没有更好的办法?我考虑过制作一个既可以继承的基本抽象模型,但是你不能在形式和事物中使用抽象模型。

实际型号:

class Unit(models.Model):
   address = models.ForeignKey(Address)
   name = models.CharField(max_length=500, verbose_name="Unit Name")
   payments = GenericRelation("Payment", content_type_field='content_type', object_id_field='object_pk')
   permissions = GenericRelation("CustomPermission", content_type_field='content_type', object_id_field='object_pk')
   association = models.ForeignKey(Association, blank=True, null=True)


def __unicode__(self):
    return self.name

“association”是我想移动到另一个模型的字段。

1 个答案:

答案 0 :(得分:0)

我猜您应该使用abstract = True https://docs.djangoproject.com/en/1.10/topics/db/models/#abstract-base-classes

class MyModel(models.Model):
    field1 =...
    field2=... 
    field3=...

    class Meta:
        abstract = True


class MyModel2(MyModel):
    field4=...


class AssociationBase(models.Model):
    association = models.ForeignKey(Association, blank=True, null=True)

    class Meta:
        abstract = True


class Unit(AssociationBase):
   address = models.ForeignKey(Address)
   name = models.CharField(max_length=500, verbose_name="Unit Name")
   payments = GenericRelation("Payment", content_type_field='content_type', object_id_field='object_pk')
   permissions = GenericRelation("CustomPermission", content_type_field='content_type', object_id_field='object_pk')


    def __unicode__(self):
    return self.name