我有django應用程序與遺留數據庫5遺留下來。幾乎所有型號都使用元屬性managed=False
進行設置。由於managed=False
已設置,因此已使用選項managed=False
創建了每個型號的遷移。而且,由於django測試運行器爲每個模型選擇現有的遷移以在test_databases中創建測試表,因此它不會創建任何內容。 我試圖創建test.py
設置與以下解決文件:與幾個遺留數據庫測試django應用程序
from web_services.settings.dev import *
from django.test.runner import DiscoverRunner
class UnManagedModelTestRunner(DiscoverRunner):
def setup_test_environment(self, *args, **kwargs):
from django.apps import apps
self.unmanaged_models = [m for m in apps.get_models() if not m._meta.managed]
for m in self.unmanaged_models:
m._meta.managed = True
super(UnManagedModelTestRunner, self).setup_test_environment(*args, **kwargs)
def teardown_test_environment(self, *args, **kwargs):
super(UnManagedModelTestRunner, self).teardown_test_environment(*args, **kwargs)
# reset unmanaged models
for m in self.unmanaged_models:
m._meta.managed = False
TEST_RUNNER = 'web_services.settings.test.UnManagedModelTestRunner'
和運行python manage.py test --settings=web_services.settings.test
。然而,它並沒有幫助,因爲無論如何 - 現有的遷移已經使用managed=False
選項創建。只有在我的模型managed=False
中註釋掉了,刪除了舊的遷移,創建了新的遷移(沒有managed=False
選項)後,測試似乎才起作用。因此,我非常失落 - 在我的案例(多個遺留數據庫)中編寫測試的實際做法是什麼?處理調整遷徙的麻煩似乎是錯誤的。
感謝。這一段時間我一直在th th。您的解決方案是唯一的解決方案(導入設置時出現問題,但也得到了解決方法) –
儘管我不特別喜歡需要單獨備份遷移,但它是我唯一的工作解決方案到目前爲止發現。 – msonsona
@AmirTugi謝謝你的回答。但是,如果你在sys.argv中加入'''if'test',你可以通過乾淨的方式來改善這個問題:'settings.py'中的這個'''this'MIGRATION_MODULES = { 'iop_bypass':'test_migrations', }好處是1.你不需要新的test_settings.py 2.你不需要運行額外的參數測試3.你沒有得到linting問題說你在PEP8中進行通配符導入 – Dinesh