我想合并两个 django 模型并创建单个模型。我们假设 我有第一个表 A,其中包含一些列和数据。
Table A
--------------
col1 col2 col3 col4
x1 x2 x3 x4
y1 y2 y3 y4
我还有另一个表 Table 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 migrate 时,django 肯定会创建一个迁移,迁移后我将能够创建上述结构,但我不想丢失我的数据,因为它将继续在 prod db 上。 使用数据库上的sql查询可以轻松完成,但如何使用django??? 预先感谢您的任何回复。
最佳答案
自定义迁移应该可以工作。
- 您已有模型 A 和 B,因此请使用这两个模型中所需的字段创建模型 C。
- 进行正常的架构迁移,例如manage.py makemigrations ...并应用任何现有更改
- 创建自定义迁移,例如python manage.py makemigrations --empty 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), ]
关于mysql - 如何将两个django模型(表)合并为一个模型(表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38006144/