Django多表继承与单独(相同)表没有指针

时间:2012-08-22 07:17:58

标签: python database django django-models django-1.1

第一篇文章/问题:)希望你们能帮忙......

我正在继承现有模型(完全来自另一个应用程序),并希望我的模型拥有自己的数据库表。原始表的相同克隆/副本,而不仅仅是一个指向存储在“父”表中的数据的表。

这是我的模特:

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 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,则可以创建一个没有自己的表的抽象基类。然后,您可以从那里创建多个继承自具有自己表的基类的类。

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'

Django 2.2 Documentation - Abstract base classes

答案 1 :(得分:0)

当你继承Django模型时,它总是会产生与父模型有关的1-1关系。 Django只会为您继承的模型生成字段。这对我来说总体上是有意义的。但是对于你的用例来说很麻烦。由于我们正在研究Django核心功能,因此可能很难解决。您可以尝试将第三方模型作为代理模型复制并粘贴到代码中,并从那里继承。

更新:但为什么要将数据分成不同的表?最终目标是什么?

答案 2 :(得分:0)

新方法(如果你坚持分离数据):创建模型MyA而不继承自A并创建另一个模型MergeA,它为My和A创建显式通用外键。但这肯定需要一些额外的编码。