2015-12-08 139 views
0

我正在開發一個大型的基於Django的項目。在我的筆記本電腦上,我使用SQLite3作爲數據庫。我爲我的模型創建了很多遷移。一切似乎工作。Django將模式從sqlite遷移到postgresql

然後我想在生產服務器上使用PostgreSQL。我準備了一個空的數據庫並試圖做manage.py syncdb。由於不存在關係,我突然發現錯誤。

Operations to perform: 
    Synchronize unmigrated apps: suit, messages, humanize, imagekit, staticfiles, crispy_forms, storages, django_extensions, localflavor, registration 
    Apply all migrations: [here list of my apps], sites, user_auth, sessions, auth 
Synchronizing apps without migrations: 
    Creating tables... 
    Creating table registration_registrationprofile 
    Running deferred SQL... 
Traceback (most recent call last): 
    File "/usr/local/lib/python3.5/dist-packages/django/db/backends/utils.py", line 62, in execute 
    return self.cursor.execute(sql) 
psycopg2.ProgrammingError: relation "user_auth_account" does not exist 

試圖將我的SQLite數據庫,並用新的SQLite執行syncdb:它創建無問題的模式。

在這裏,我已經意識到SQLite不使用外鍵關係,只是使用integer類型的所有引用。所以它適用於sqlite。非常聰明,Django。但是我所有的模型都依賴於對方。我想使用不同的數據庫。

現在我有一堆只在SQLite上工作的遷移。

據我所知,可以爲模型第一次創建的每個應用程序逐個運行遷移。但它會是一個地獄。

是否可以檢測依賴關係並按正確的順序運行這些遷移?

回答

1

Django正確處理遷移模型之間的依賴關係。它不能處理,以及它明確地警告不要in the docs,是遷移應用程序具有依賴性未遷移的應用程序:

注意,但是,未遷移的應用程序可以不依賴於遷移 應用程序,通過的本質沒有遷移。這意味着它 通常不可能有一個未移植的應用程序擁有ForeignKey 或ManyToManyField到已遷移的應用程序;有些情況可能會起作用,但最終會失敗。

警告

即使事情似乎與這取決於 遷移應用程序未遷移應用程序的工作,Django的可能不會生成所有必要的外鍵約束 !

在這種特殊情況下是似乎registration應用程序對用戶模型的依賴性。您需要將此應用升級到具有必要的遷移文件以支持Django 1.7+的版本。

+0

太棒了,謝謝,哥們!在我的情況下,它是'django-registration-redux == 1.1'。更新到1.2,現在一切正常! – baldr

相關問題