![](/img/trans.png)
[英]Django model polymorphism without Multi-Table Inheritance and additional JOIN
[英]Django multi-table inheritance with separate (identical) tables without pointers
我正在继承现有模型(完全来自另一个应用程序)并希望我的模型拥有自己的数据库表。 原始表的相同克隆/副本,而不仅仅是带有指向存储在“父”表中的数据的指针的表。
这是我的模型:
class A (models.Model):
name = models.CharField('name')
class MyA (A):
class Meta:
db_table = 'My_A'
这是我的数据库表:
CREATE TABLE A
(
id serial NOT NULL,
"name" character varying(50) NOT NULL,
...
)
CREATE TABLE My_A
(
A_ptr_id integer NOT NULL,
...
)
这就是我想要的:
CREATE TABLE A
(
id serial NOT NULL,
"name" character varying(50) NOT NULL,
...
)
CREATE TABLE My_A
(
id serial NOT NULL,
"name" character varying(50) NOT NULL,
...
)
编辑:我最终复制粘贴了第 3 方模型
如果我理解正确,您可以创建一个没有自己的表的抽象基类。 然后,您可以创建多个继承自具有自己表的基类的类。
class ABase(models.Model):
name = models.CharField('name')
class Meta:
abstract = True
class A(ABase):
class Meta:
db_table = 'A'
class MyA(ABase):
class Meta:
db_table = 'My_A'
新方法(如果您坚持分离数据):创建模型 MyA 而不从 A 继承,并创建另一个模型 MergeA,为 My 和 A 创建显式通用外键。但这肯定需要一些额外的编码。
当您继承 Django 模型时,它将始终生成与父模型的隐式 1-1 关系。 Django 只会为您继承的模型生成字段。 总的来说,这对我来说完全有意义。 但是对于您的用例来说很麻烦。 由于我们在谈论 Django 核心功能,因此可能很难解决。 您可以尝试将您的第 3 方模型作为代理模型复制并粘贴到您的代码中并从那里继承。
更新:但是为什么要将数据分离到不同的表中? 最终目标是什么?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.