如何仅为重写函数而继承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()实现了这一点。这仍然为我的每个新类创建了一个新表。哦,很抱歉,我的答案与此部分相关。