2016-06-24 140 views
1

我想合併兩個django模型並創建單個模型。讓我們假設 我有第一個表格A與一些列和數據。如何將兩個django模型(表格)合併爲一個模型(表格)

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遷移,Django的必將創造一個遷移和遷移後,我將能夠創建上述結構,但我不想放棄我的數據,因爲它會繼續prod db。 它可以很容易地與數據庫上的SQL查詢,但如何做與Django? 預先感謝您的回覆。

+0

我建議你接受keni的回答 –

回答

1

自定義遷移應該可以工作。

  1. 您已經有模型A和B,因此您需要從兩個模型創建模型C。
  2. 進行正常的模式遷移,例如manage.py makemigrations ...並申請任何現有更改
  3. 創建自定義遷移蟒manage.py makemigrations --empty yourappname(參見由@共享鏈路2PS
  4. 編輯上面生成的文件,我已經添加下面的樣本數據遷移。
  5. 朗姆酒manage.py遷移到來自步驟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), 
        ] 
    
相關問題