【问题标题】:How to merge two django models (tables) into one model (table)如何将两个 django 模型(表)合并为一个模型(表)
【发布时间】:2016-06-24 05:26:16
【问题描述】:

我想合并两个 django 模型并创建单个模型。让我们假设 我有第一个表 A,其中包含一些列和数据。

Table A
--------------
col1   col2    col3    col4
x1     x2      x3      x4
y1     y2      y3      y4

我有另一个表 B 有一些列和数据

Table B
--------------
col1   col2    col5    col6
x1     x2      p3      p4
y1     y2      p5      p6

在这两个模型(表格)中,我有几列(这里是两列)相似,而几列不同。所以我想合并两个模型(表)并生成如下内容:

Table C
-------------------------------------
col1    col2    col3    col4    col5    col6
x1      x2      x3      x4      p3      p4
y1      y2      y3      y4      p5      p6

我知道何时合并模型并运行 make migration,django 肯定会创建一个迁移,迁移后我将能够创建上述结构,但我不想丢失我的数据,因为它将继续在 prod db . 它可以通过数据库上的 sql 查询轻松完成,但如何使用 django ???? 提前感谢您的任何回复。

【问题讨论】:

  • 我建议你接受keni的回答

标签: mysql django database


【解决方案1】:

自定义迁移应该可以工作。

  1. 您已经有模型 A 和 B,因此请使用两个模型中所需的字段创建模型 C。
  2. 进行正常的架构迁移,例如manage.py makemigrations ...并申请任何现有的更改
  3. 创建自定义迁移,例如python manage.py makemigrations --empty yourappname(见@2ps分享的链接
  4. 编辑上面生成的文件,我在下面添加了一个示例数据迁移。
  5. rum manage.py migrate 以应用上述步骤 4 中的迁移。
  6. 如果您愿意,请删除模型 A 和 B,生成迁移并应用,您应该会很好。

    ...

    def merge_models_ab(apps, schema_editor):
        A = apps.get_model("app_name", "A")
        B = apps.get_model("app_name", "B")
        C = apps.get_model("app_name", "C")
        #come up with some interesting ways to join A and B
        #iterate over join and insert into C
        #C.objects.create(...)
    

    ...

    class Migrations(migrations.Migration):
        dependencies = [
            ('app_name', 'some_prev_migrations'),
        ]
        operations = [
            migrations.RunPython(merge_models_ab),
        ]
    

【讨论】:

    【解决方案2】:

    进行自定义数据迁移(read the docs)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 2012-03-09
      • 2021-06-18
      相关资源
      最近更新 更多