Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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 运行tests.py时Django重新导入模块_Python_Django - Fatal编程技术网

Python 运行tests.py时Django重新导入模块

Python 运行tests.py时Django重新导入模块,python,django,Python,Django,我正在开发一个Django应用程序,它可以提前在所有模型上执行一些类内省 如果这些模型是在models.py中定义的,那么这似乎可以正常工作,但是如果我在tests.py中定义它们,_init__;.py看不到这些模型 目标是使模块级字典在加载_init__u;.py时运行一次: perms_dict = {} for cls in Models.__subclasses__(): add some stuff to perms_dict 运行测试时,此代码块将运行两次,第一次在tes

我正在开发一个Django应用程序,它可以提前在所有模型上执行一些类内省

如果这些模型是在models.py中定义的,那么这似乎可以正常工作,但是如果我在tests.py中定义它们,_init__;.py看不到这些模型

目标是使模块级字典在加载_init__u;.py时运行一次:

perms_dict = {}
for cls in Models.__subclasses__():
    add some stuff to perms_dict
运行测试时,此代码块将运行两次,第一次在tests.py中看不到模型,第二次在tests.py模型中看到模型。不幸的是,当在_init__u;.py文件中调用函数时,出于某种原因,它似乎使用了初始运行时的perms_dict,并且不包括tests.py中的模型

最简单的解决方案是从_init__.py中导入tests.py,以便它知道这些模型,但显然在实际使用中这是不可取的

Git回购可在以下网址获得:git://github.com/philipkimmey/django-cerberus.git


谢谢

您的核心任务似乎是为每个模型只运行一次代码。有一个很好的解决方案:
class\u准备好了来自django内置的信号


至于提前进行内省,这在某些情况下可能是不可取的——例如,当动态创建模型类时。我建议先加载
models.py
,然后让信号处理程序在导入剩余的模型类后处理它们。

这太好了,我从未听说过这个信号,谢谢!让我测试一下,以确保它实现了我的目标,我会回来接受。准备好的课程似乎是朝着正确的方向迈出的一步。我遇到了更多的问题,我认为这些问题可能是由于Django的怪癖(在运行测试时两次导入模块)或是由于我不了解模块作用域变量在Python中的工作方式。由于使用class_prepared解决了上述特定问题,我将在另一个问题中询问我的新问题。再次感谢!