Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django模型类继承-默认字段和重写_Python_Django_Class_Inheritance - Fatal编程技术网

Python Django模型类继承-默认字段和重写

Python Django模型类继承-默认字段和重写,python,django,class,inheritance,Python,Django,Class,Inheritance,我正在尝试继承类模板,以便我的所有模型都有特定的默认字段,并且都有一些函数(如save_model()的默认重写) 如果我这样做,我会得到覆盖,但随后必须手动设置元数据,如db_table class ModelExtension(models.Model): altered_by = models.CharField(max_length=64) class SomeModel(ModelExtension): class Meta: db_table = '

我正在尝试继承类模板,以便我的所有模型都有特定的默认字段,并且都有一些函数(如save_model()的默认重写)

如果我这样做,我会得到覆盖,但随后必须手动设置元数据,如db_table

class ModelExtension(models.Model):
    altered_by = models.CharField(max_length=64)

class SomeModel(ModelExtension):
    class Meta:
        db_table = 'app_somemodel'
    fields = models.CharField()
    ...

有没有办法让这种遗产正常运作?到目前为止,我要么不得不做额外的工作来弥补这种方法的缺点,要么我被MRO错误所困扰。2

什么是MRO错误?你读过关于模型继承的django文档了吗?您可以有抽象基类、多表继承或代理模型

您所做的是一个多表继承-有一个隐藏的OneToOneField连接您的两个模型。我不知道您为什么认为需要指定的db_表-它不应该是这样

如果您永远不会拥有裸类ModelExtension的对象,那么您需要抽象基类。在本例中,将abstract=True放入Meta部分,然后将基类中的所有字段添加到子类的表中。医生们比我在这里解释得更好


我经常发现自己开始用一种方式做这件事,然后随着我对数据库结构的思考,我会来回翻动几次……

什么是MRO错误?你读过关于模型继承的django文档了吗?您可以有抽象基类、多表继承或代理模型

您所做的是一个多表继承-有一个隐藏的OneToOneField连接您的两个模型。我不知道您为什么认为需要指定的db_表-它不应该是这样

如果您永远不会拥有裸类ModelExtension的对象,那么您需要抽象基类。在本例中,将abstract=True放入Meta部分,然后将基类中的所有字段添加到子类的表中。医生们比我在这里解释得更好


我经常发现自己开始用一种方法来做这件事,然后随着我对我的数据库结构的思考,来回翻动几次……

如果您只想在不更改其字段的情况下向模型添加新功能,请使用

如果您只想向模型添加新功能而不更改其字段,请使用

如果我不指定db_表,所有继承的模型都有一个“app_modelextension”的db_表,我认为如果没有abstract=True,每个模型都应该有一个app_modelextension和一个app_somemodel表,并带有链接它们的额外OneToOne字段。这就是文件所暗示的!如果我不指定db_表,所有继承的模型都有一个“app_modelextension”的db_表,我认为如果没有abstract=True,每个模型都应该有一个app_modelextension和一个app_somemodel表,并带有链接它们的额外OneToOne字段。这就是文件所暗示的!我想要功能和字段。我想要功能和字段。