Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何将两个django模型(表)合并为一个模型(表)_Mysql_Django_Database - Fatal编程技术网

Mysql 如何将两个django模型(表)合并为一个模型(表)

Mysql 如何将两个django模型(表)合并为一个模型(表),mysql,django,database,Mysql,Django,Database,我想合并两个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 y

我想合并两个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
我知道当我将合并模型并运行makemigration时,django肯定会创建一个迁移,迁移后,我将能够创建上述结构,但我不想丢失数据,因为它将在prod db上运行。 在数据库上使用sql查询很容易做到,但如何使用django????
提前感谢您的回复。

进行自定义数据迁移。

自定义迁移应该可以工作

  • 您已经有了模型A和B,因此可以使用这两个模型中的字段创建模型C
  • 进行常规架构迁移,例如manage.py makemigrations。。。并申请任何现有变更
  • 创建自定义迁移,例如python manage.py makemigrations——清空yourappname(请参阅@2ps共享的链接
  • 编辑上面生成的文件,我在下面添加了一个数据迁移示例
  • rum manage.py migrate以应用上述步骤4中的迁移
  • 如果你愿意的话,放弃模型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),
        ]