2012-01-25 19 views
1

在Django項目我工作我在視圖中導入形式如下isinstance()和類型()由於導入機構(蟒/ django的)

#views.py 
from forms import SomeForm 

然後在測試失敗equivelence文件我有

#form_test.py 
from app.forms import SomeForm  
. 
. 
. 
self.assertTrue(isinstance(response.context['form'], SomeForm)) 

爲什麼isinstance不起作用?

如果我檢查類型的兩個對象的輸出()我得到這樣的:

response.context形式: 預計形式:

我可以讓我的進口機制的意見解決這個問題。 py匹配form_test.py中的內容,但這看起來像是錯誤的方法。

參考,文件結構爲:

  • 網站/
    • manage.py
    • 應用程序/
      • forms.py
      • views.py
      • 測試/
        • form_test.py

回答

5

isinstance也比較模塊的位置,response.context['form']類的模塊是forms其中SomeForm模塊app.forms您分別檢查__class__.__module____module__檢查。

爲了使isinstance工作,你可以:

  • 固定在views.py(推薦)
  • 在form_testse.py ALTER sys.path的導入,能夠以進口形式從形式進口SomeForm
  • 嘗試intrapackage references
0

一個可能的黑客是檢查類型的__name__屬性,但除非你解決這個問題的正確方法,你可能會遇到OT她的問題

def sharetypename(obj1, obj2): 
    if isinstance(obj1, type): 
     c1 = obj1.__name__ 
    else: 
     c1 = type(obj1).__name__ 

    if isinstance(obj2, type): 
     c2 = obj2.__name__ 
    else: 
     c2 = type(obj2).__name__ 

    return c1 == c2