Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:tests.py将项目名称添加到类中_Python_Django - Fatal编程技术网

Python Django:tests.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

在my views.py中,我有一段代码,用于检查一个模型是否继承自另一个模型

 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_鼻子测试跑步者身上。