3

在我正在处理的 Django 项目中,我在视图中导入了一个表单,如下所示

#views.py
from forms import SomeForm

然后在一个测试文件中我有

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

为什么 isinstance 不起作用?

如果我检查两个对象的 type() 输出,我会得到:

response.context 形式:预期形式:

我可以通过使views.py 中的导入机制与form_test.py 中的匹配来解决此问题,但这似乎是错误的方法。

供参考,文件结构如下:

  • 地点/
    • 管理.py
    • 应用程序/
      • 表格.py
      • 视图.py
      • 测试/
        • form_test.py
4

2 回答 2

7

isinstance also compare module location, response.context['form'] class' module is forms where SomeForm module is app.forms you check this by inspecting respectively __class__.__module__ and __module__.

To make isinstance work you can:

  • fix the import in the views.py (recommended)
  • alter sys.path in form_testse.py to be able to import the form as from forms import SomeForm
  • try intrapackage references
于 2012-01-25T17:10:06.703 回答
0

一种可能的技巧是检查__name__类型的属性,尽管除非您以正确的方式修复它,否则您可能会遇到其他问题

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
于 2015-08-19T22:08:55.227 回答