Python Django:tests.py将项目名称添加到类中
在my views.py中,我有一段代码,用于检查一个模型是否继承自另一个模型Python Django:tests.py将项目名称添加到类中,python,django,Python,Django,在my views.py中,我有一段代码,用于检查一个模型是否继承自另一个模型 def inherits_from_animal(some_animal): return Animal in inspect.getmro(some_animal) 现在,在my views.py中,这是可行的,但在我的测试中,它失败了,因为项目的名称被添加到了类名中 因此,如果我有一个名为zoo的项目和一个名为animals的应用程序,它看起来像: views.py: <class 'anim
def inherits_from_animal(some_animal):
return Animal in inspect.getmro(some_animal)
现在,在my views.py中,这是可行的,但在我的测试中,它失败了,因为项目的名称被添加到了类名中
因此,如果我有一个名为zoo的项目和一个名为animals的应用程序,它看起来像:
views.py:
<class 'animals.models.Animal'>
tests.py:
<class 'zoo.animals.models.Animal'>
有人能解释一下为什么会发生这种情况,以及我如何解决它吗
更新:
似乎只发生在一个抽象模型上。inspect模块正在做一些可疑的事情 Python的内置函数仅适用于此场合
def inherits_from_animal(some_animal):
return issubclass(some_animal, Animal)
虽然我不明白为什么您不能在使用inherits\u from\u animal now;)的任何地方使用issubclass 问题是
manage.py
。如果您将django应用程序放在其他软件包中,则应使用其完全限定的模块名进行导入,并在已安装的应用程序中使用
如果省略父包名称,它仍然有效,因为manage.py会临时破解sys.path以导入包含设置模块的模块。然后nose执行自己的导入魔法,无法复制manage.py hack
我建议使用django-admin.py而不是manage.py,因为它不执行任何导入技巧。
django没有项目概念。只要把所有东西都当作普通的python包来处理,并控制你的PYTHONPATH。实际上,issubclass在我的测试中也失败了。PyClass在django shell中运行时失败了吗?啊!抱歉,我交换了参数的顺序。请立即尝试。问题在于已安装的应用程序中的命名。对我来说,项目名称始终在类名中,无论是否为抽象名称。不知道这些类名是在哪里确定的?如何在views.py/tests.py中导入动物?你如何在已安装的应用程序中引用
动物
应用程序?@emulbreh似乎你的想法是正确的。我只将应用程序名称添加到已安装的应用程序中,而没有添加项目名称。现在,所有的模型都在前面加上了项目名称。似乎只发生在django_鼻子测试跑步者身上。