【问题标题】:Django model inheritance - can I change model type?Django 模型继承 - 我可以更改模型类型吗?
【发布时间】:2009-09-10 22:47:55
【问题描述】:

当我使用多表继承时,Django 创建了两个表——一个用于基类,一个用于派生表,指向第一个。有没有办法在删除派生条目的同时保留基表条目,并为另一个模型创建另一个条目?

简单地说:我有模型:A、B(从 A 派生)、C(从 A 派生)。我想将 B 类型的对象转换为 C 类型。复制不是一个好的解决方案,因为 A 作为一组项目,所以项目用 ForeignKey 指向它。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    没有内置的方法可以做到这一点。如果由于 FK 指向它而需要保留基表中的条目,则必须编写一些管理器方法来使用原始 SQL 操作 B 和 C 表。

    如果您使用的 RDBMS 不支持参照完整性,您可能只需复制数据,删除 B 实例,然后创建 C 实例,并将 PK 手动设置为 B 的 PK。

    【讨论】:

    • 当 InnoDB 用作引擎(即大多数现代生产安装)时,MySQL 已经支持引用完整性超过 5 年了
    • 我知道,无论如何我都得去挖掘一下 :-)
    【解决方案2】:

    如果没有内置方法,那么我认为手动操作也不错——将c 复制为b,然后再复制b.items.update(itemset=c)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-20
      • 2015-03-05
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多