Python Django模型类继承-默认字段和重写
我正在尝试继承类模板,以便我的所有模型都有特定的默认字段,并且都有一些函数(如save_model()的默认重写) 如果我这样做,我会得到覆盖,但随后必须手动设置元数据,如db_tablePython 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 = '
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字段。这就是文件所暗示的!我想要功能和字段。我想要功能和字段。