2017-02-15 49 views
0

我正在开发一个项目,我需要定义一些模型,这些模型具有一些与其中的业务逻辑相关的功能,例如,如何在从数据库读取数据时处理数据。如何继承django模型只是为了覆盖函数?

我想从同一个父模型继承多个模型,在每个模型中我重写了一些特定的函数。我不希望为每个新模型创建一个新表,因为我只重写功能而不添加任何字段。如何实现这一目标?

代理模型没有帮助,因为我无法从数据库对象中检索相应的类。

例子: -

class ParentModel(models.Model): 
    f1=fields.IntegerField() 

    def processing_func1(self): 
     <default func1 functionality> 

    def processing_func2(self): 
     <default func2 functionality> 

class ChildModel1(models.Model): 

    def processing_func1(self): 
     <overridden func1 functionality> 

class ChildModel2(models.Model): 

    def processing_func2(self): 
     <overridden func2 functionality> 

我需要孩子的模型是通过ParentModel访问。例如,如果我做ParentModel.objects.all()我得到ChildModels的对象。对于正常的模型继承,我使用django-model-utils来实现。

+2

你是什么意思'无法从数据库对象中检索合适的类?如果将ChildModels定义为代理,则可以使用数据库,因为它是父级模型。代理模型正好适合您的情况。 – Raz

+0

https://docs.djangoproject.com/en/1.10/topics/db/models/#proxy-models – abrunet

+0

我需要通过ParentModel访问子模型。例如,如果我做ParentModel.objects.all()我得到ChildModels的对象。对于正常的模型继承,我通过说ParentModel.object.select_subclasses() –

回答

0

你需要的是这里一个混合,使抽象类从Django模型继承的属性

这样的事情。

class UtilMixin(models.Model): 

    def processing_func1(self): 
     <default func1 functionality> 

    def processing_func2(self): 
     <default func2 functionality> 

    class Meta: 
     abstract = True 


class ChildModel1(UtilMixin): 

    def processing_func1(self): 
     <overridden func1 functionality> 

class ChildModel2(UtilMixin): 

    def processing_func2(self): 
     <overridden func2 functionality> 
+0

使用django-model-utils来实现这一点。这仍然为我的每个新类创建一个新表。 –

+0

哦,对不起,我的答案与这一个部分相关。 –