如何仅为重写函数而继承django模型?

如何仅为重写函数而继承django模型?,django,django-models,Django,Django Models,我正在从事一个项目,在这个项目中,我需要定义一些模型,这些模型中包含一些具有业务逻辑的功能,例如如何在从数据库中提取数据时处理数据 我想从同一父模型继承多个模型,在每个模型中,我覆盖一些特定的函数。我不希望为每个新模型创建一个新表,因为我只覆盖功能,不添加任何字段。如何做到这一点 代理模型没有帮助,因为我无法从数据库对象检索适当的类 例如:- class ParentModel(models.Model): f1=fields.IntegerField() def proces

我正在从事一个项目,在这个项目中,我需要定义一些模型,这些模型中包含一些具有业务逻辑的功能,例如如何在从数据库中提取数据时处理数据

我想从同一父模型继承多个模型,在每个模型中,我覆盖一些特定的函数。我不希望为每个新模型创建一个新表,因为我只覆盖功能,不添加任何字段。如何做到这一点

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

例如:-

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>
类父模型(models.Model):
f1=字段。整型字段()
def处理功能1(自身):
def处理功能2(自身):
类ChildModel1(models.Model):
def处理功能1(自身):
类ChildModel2(models.Model):
def处理功能2(自身):

我需要通过ParentModel访问子模型。例如,如果我执行ParentModel.objects.all()操作,我会得到ChildModels的对象。对于普通的模型继承,我使用django模型utils实现了这一点。

您需要的是在这里混合,并使抽象类继承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>
类UtilMixin(models.Model): def处理功能1(自身): def处理功能2(自身): 类元: 抽象=真 类ChildModel1(UtilMixin): def处理功能1(自身): 类别ChildModel2(UtilMixin): def处理功能2(自身):
您可以通过使用来实现这一点。如文件所述:

使用多表继承时,将创建一个新的数据库表 对于模型的每个子类。这通常是期望的行为, 因为子类需要一个地方来存储任何额外的数据字段 基类上不存在的。然而,有时候,你只是 想要改变模型的Python行为——也许是改变 默认管理器,或添加新方法

因此,您可以通过为原始模型创建代理来添加或覆盖函数。
下面是一个如何创建代理模型的示例:

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

class MyPerson(Person):
    class Meta:
        proxy = True

    def do_something(self):
        # ...
        pass

MyPerson
类在与其父类
Person
类相同的数据库表上操作。特别是,
Person
的任何新实例也可以通过
MyPerson

访问,您所说的
无法从数据库对象中检索适当的类是什么意思?若您将ChildModels定义为代理,那个么您将能够像处理父模型一样处理数据库。您的案例正需要代理模型。我需要通过ParentModel访问子模型。例如,如果我执行ParentModel.objects.all()操作,我会得到ChildModels的对象。对于普通的模型继承,我使用django model utils通过ParentModel.object.select_subclasses()实现了这一点。这仍然为我的每个新类创建了一个新表。哦,很抱歉,我的答案与此部分相关。