由于导入机制(python/django),isinstance()和type()等效失败
在Django项目中,我在视图中导入一个表单,如下所示由于导入机制(python/django),isinstance()和type()等效失败,python,django,types,import,isinstance,Python,Django,Types,Import,Isinstance,在Django项目中,我在视图中导入一个表单,如下所示 #views.py from forms import SomeForm 然后在一个测试文件中 #form_test.py from app.forms import SomeForm . . . self.assertTrue(isinstance(response.context['form'], SomeForm)) 为什么iInstance不起作用 如果我检查两个对象的type()输出,我会得到以下结果: 回应.背景表格
#views.py
from forms import SomeForm
然后在一个测试文件中
#form_test.py
from app.forms import SomeForm
.
.
.
self.assertTrue(isinstance(response.context['form'], SomeForm))
为什么iInstance不起作用
如果我检查两个对象的type()输出,我会得到以下结果:
回应.背景表格:
预期形式:
我可以通过使views.py中的导入机制与表单_test.py中的导入机制匹配来解决这个问题,但这似乎是错误的方法
供参考,文件结构如下:
- 场地/
- manage.py
- 应用程序/
- forms.py
- views.py
- 测验/
- form_test.py
isinstance
也比较模块位置,响应。上下文['form']
class'模块是表单
其中某个表单模块是应用程序。表单
您可以通过分别检查\uu class\uuuuuuuuuuuuuuuuu模块
和\uuuuuuuuuuuu模块
来检查这一点
要使iInstance正常工作,您可以:
- 修复views.py中的导入(推荐)
- 在form_testse.py中更改sys.path,以便能够从forms import SomeForm导入表单
- 试一试
\uuuu name\uuuu
属性,尽管除非您以正确的方式修复它,否则可能会遇到其他问题
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