簡體   English   中英

Django遷移:如何使現有模型抽象化?

[英]Django migrations: How to make existing model non-abstract?

我有兩個模型類Base和Derived(繼承自Base),Base是抽象的。 現在我意識到基地應該是具體的。 如何創建可以為我進行切換的遷移?

對於我來說,當前的主要問題是派生表中所需的base_ptr_id列,這是主鍵。 必須添加此列並接收指向表Base中相應行的正確值。 目前,我正在執行以下遷移操作:

  1. 創建模型庫
  2. 使用RunSQL將數據從派生表復制到基本表。
  3. 將OneToOneField base_ptr添加到派生中,並且primary_key = False
  4. 使用RunSQL將ID復制到base_ptr_id列中
  5. 從派生中刪除id列
  6. 將OneToOneField base_ptr更改為primary_key
  7. 從“派生”中刪除所有其他繼承的字段

當前,該過程在第3步失敗。看起來Django仍然創建了一個主鍵列base_ptr_id,該鍵失敗了,因為現有行將具有相同的默認值。

那我該怎么辦?

更進一步,我想出了以下解決方案:

  1. 創建模型庫
  2. 使用RunSQL將數據從派生表復制到基本表。
  3. 在名為primary_key = False和db_column ='base_ptr_id'的Derived中添加一個名為base_ptr的整數字段
  4. 使用RunSQL將ID復制到base_ptr_id列中
  5. 從派生中刪除id列
  6. 將base_ptr更改為必需的OneToOneField,這也意味着是primary_key
  7. 從“派生”中刪除所有其他繼承的字段

這樣看來可行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM