我有一個模塊pagetypes.py
提取一些常量的(我真的不應該用這個詞常在這裏)從該數據庫以備後用:在某處意見如何在Fixture加載到Django中的db之後對ORM調用進行延遲評估?
def _get_page_type_(type):
return PageType.objects.get(type=type)
PAGE_TYPE_MAIN = _get_page_type_('Main')
PAGE_TYPE_OTHER = _get_page_type_('Other')
然後我做的:
import pagetypes
...
print pagetypes.PAGE_TYPE_MAIN #simplified
這一切都正常工作時,db有這些記錄,我確信它沒有...除非此代碼正在測試。在這種情況下,我想通過燈具將這些記錄加載到數據庫中。但問題是,燈具不加載(甚至syncdb
不運行)的時候pagetypes模塊導入導致_get_page_type_
電話與失敗:
psycopg2.ProgrammingError: relation "pagetype" does not exist
測試運行總是嘗試導入pagetypes
模塊,因爲它是通過正在測試的視圖導入。
我該如何解決這個問題?
我在想延遲加載網頁類型常數PAGE_TYPE_MAIN
,PAGE_TYPE_OTHER
,但後來我想,如果這些記錄不是在DB(或夾具如果被測)到早期失敗了,所以我真的不知道如何實現這個。
我也在考慮對象級別的緩存,只要調用PageType.objects.get(type=type)
就可以使用/調用常量,但這不是一個矯枉過正的問題嗎?調用沒有緩存的orm會導致太多的數據庫調用,我想阻止它。
它必須是非常簡單的東西,但我不能解決它。 ;-)
這很聰明,很簡單。 – googletorp 2010-06-25 18:34:21
我稍微修改你的代碼少做打字我想使用的頁面類型常量每次: 'PAGE_TYPE_MAIN =屬性(拉姆達:get_page_type(「主」))' 我使用了一些代碼,從http:// stackoverflow.com/questions/880530/can-python-modules-have-properties-the-same-way-that-objects-can可以使'property'在模塊級別上工作。工作正常,謝謝! – parxier 2010-06-26 16:39:10