2015-04-30 110 views
3

我有一個Model名爲FooModel定義在my_app/models/foo.pyDjango遷移引用刪除的模塊

刪除foo.py後,運行Django(1.7)遷移引發錯誤,因爲舊的遷移文件導入了foo.pyimport myapp.models.foo.FooModel)。

我應該如何解決這個問題?

當模型有ImageFieldupload_to參數時會發生這種情況。

+0

你刪除了'FooModel'還是移動了它? – aumo

+0

有時候,我刪除了,這次我把它移開了。 – eugene

回答

1

有兩種情況:

  1. 你搬到別處FooModel,然後編輯您的所有遷移文件,以反映這一舉動。

  2. 您刪除FooModel,在這種情況下,請按照下列步驟操作:

    • FooModel回到它在哪裏。
    • 確保代碼中沒有其他地方提及FooModel
    • 運行./manage.py makemigrations my_app
    • 運行./manage.py squashmigrations my_app <migration created with the previous comand> - 看到doc對擠壓遷移更多的信息。
    • 對其遷移中引用FooModel的任何應用重複上述兩個步驟。
    • 刪除FooModel和陳舊的遷移文件,一旦你確保一切正常工作。

這應該因爲FooModel沒有從任何其他模型中引用,應該從遷移文件時,擠壓他們刪除。

但是,要警告的是壓縮遷移不是一個簡單的操作,並且可能會導致將模型保留在代碼庫中而不使用它。

注意:在這種情況下,所討論的對象是Django模型,但這適用於由遷移文件引用的任何類,函數或模塊。

+0

謝謝!希望有一個簡單的解決方案。但很高興知道目前可用的最佳選擇。 – eugene