2011-02-17 131 views
0

我們正在將Django項目的多個實例中的數據遷移到新模式。Django數據遷移,使用南繼承

舊模式有:

class Group(models.Model) 
class User(models.Model) 

而新的模式有:

class AccessEntity(models.Model) 
class Group(AccessEntity) 
class User(AccessEntity) 

我們正試圖利用南方做這些組和用戶數據遷移。 http://south.aeracode.org/docs/tutorial/part3.html

我已經收集到我需要使用轉發規則來指定如何遷移用戶,但是我遇到了一些問題。

主要問題是如果我要創建一個擴展AccessEntity類的新User對象,如何保持用戶/組的ID相同。

用戶&組通過它們擁有或分配給它們的對象引用。如果我改變他們的ID,那麼信息將會丟失。即使我現在需要它從AccessEntity擴展,是否有一種方法可以爲對象保留相同的ID?

回答

2

不知道我是否正確理解您的問題,但多表模型繼承的工作方式是在父模型和子模型中會存在隱式的一對一字段。因此,如果AccessEntity具有這樣的字段,則用戶和組將使用AccessEntity的ID字段。

如果您創建AccessEntity,使其具有ID字段,則可以在編寫轉發(數據)遷移時分配給它。這樣你可以確保AccessEntity獲得正確的ID。

如果已經寫了更長的multi-table inheritance tutorial,它看起來像你正在嘗試做類似的事情。

此外,對this question的回答也可能有幫助(請注意,原始答案中的某些內容在django/south的新版本中無效,請參閱我的教程/底部的答案以進行更改)。

您的情況可能是什麼問題,如果您已經在用戶和組中都有數據,並且id字段是自動生成的,則IDs可能不是明顯的,例如,您很可能會同時擁有一個用戶和一個羣組ID==1。如果要根據那些IDs進行查詢,並且當然ID不能成爲AccessEntity的主鍵,則這可能是個問題。