2014-09-06 28 views
4

我試圖在Django 1.7中添加初始數據,並且我已閱讀它建議使用數據遷移。在遷移中指定應用程序依賴關係

我已經正確創建了我的遷移文件,名爲「0001_groups」,其中我創建了幾個contrib.auth的組和權限。

問題是,它在運行auth遷移之前運行。

我去了解last migration of the auth app的名字是什麼,它叫0005_alter_user_last_login_null.py。於是,我試着用:

dependencies = [ 
    ('auth', '0005_alter_user_last_login_null'), 
] 

,但我得到:

KeyError: u"Migration appname.0001_groups dependencies references nonexistent parent node ('auth', '0005_alter_user_last_login_null')"

我GOOGLE了這個錯誤,並能連11個月的Django的老修復的錯誤。

如何正確指定auth應用程序依賴關係?

+0

你試過'django.contrib.auth',而不是'auth'在指定的依賴? – ChillarAnand 2014-09-06 19:31:41

回答

2

您正在使用1.7但查看master源代碼樹。請參閱this並嘗試0001_initial

+1

是的,我注意到了。我結束了使用'__latest__'。謝謝。 – Shoe 2014-09-07 00:13:21

+1

如果「0001_initial」實際上是你想要的,你可以使用'__first__'。 – Rockallite 2015-08-26 09:21:37

11

我發現,你可以用__latest__參考上次遷移:

dependencies = [ 
    ('auth', '__latest__'), 
] 
+1

但是,一般情況下,您不希望*引用最新的遷移。如果你有一個'ForeignKey'以後被刪除的Model?您的遷移將會中斷。對於像'django.contrib.auth'這樣的穩定​​軟件包來說,這不太可能,但它仍然是一種不好的做法,並且不會帶來任何好處。 – 2014-09-07 00:37:40

+0

完全不是,這不是如何遷移的工作。請注意,'makemigrations'產生對* specific * migrations的依賴關係,而不是'__latest__',並且Django源代碼本身引用了其依賴關係中的特定遷移(例如[here](https://github.com/django/django/blob) /master/django/contrib/flatpages/migrations/0001_initial.py))。有關使用'__latest__'的問題,請參閱[這裏](https://code.djangoproject.com/ticket/23071)。 – 2014-09-07 01:41:04

+0

我建議你發佈一個新問題,連同你的代碼,解釋你遇到的問題。這裏不夠。在[文檔](https://docs.djangoproject.com/en/dev/topics/migrations/#historical-models)中介紹了關於自定義'Managers'的一點。爲了進行遷移,Django必須擁有模型的* textual *表示,並且因爲「不可能序列化任意Python代碼」,表示不能包含自定義方法或'Managers'。 – 2014-09-07 04:43:42

相關問題