2013-05-02 75 views
3

我試圖從一個Django模型的一些字段移動到一個新的。假設我有一本書型號:將數據從一個Django模型移動到另一個(Django +南)在一個生活的應用程序

class Book(models.Model): 
    title = models.CharField(max_length=128) 
    author = models.CharField(max_length=128) 

我決定我需要一個單獨的作者模型(添加額外的數據等)。所以,記住,我有一個正在運行的應用程序的數據填充軸承,保持所需的佈局兼容性將是:

class Author(models.Model): 
    name = models.CharField(max_length=128, null=True) # null at first; filled with datamigration 
    nationality = models.CharField(max_length=64, null=True) # we don't have nationality for existing authors, but we'll ask the new ones 

class Book(models.Model): 
    title = models.CharField(max_length=128) 
    author_model = models.ForeignKey(Author, null=True) 
    @property 
    def author(self): 
    return self.author_model.name 
    @author.setter 
    def author(self, newval): 
    self.author_model.name = newval 

這樣我就必須創建schemamigration,增加了作者,然後datamigration傳輸數據並填寫author_model_id以獲取書籍,最後進行數據遷移以從「books」表中刪除「author」列。問題是,將Book.author從字段更改爲屬性後,我的遷移將有效嗎?我的意思是,如果在之前的遷移中South嘗試訪問Book.author(期望CharField),它實際上會獲得一個嘗試獲取不存在模型的屬性。如何做到這一點?

回答

1

我剛開始時將作者CharField重命名爲author_str進行一次遷移,然後添加新模型並執行數據遷移,然後刪除author_str字段。

Django - How to rename a model field using South?

+0

謝謝,這很有道理 - 重命名爲「作者」的東西不會觸發屬性。 – 2013-05-02 09:42:29

+0

另外,由於您正在更新模型,因此您可能需要考慮是否要支持具有多個作者的圖書。 (因此有一個ManyToMany字段)。 – related 2013-05-02 09:54:16

相關問題