**使用pycharm测试时引发的编辑错误

2024-10-03 17:20:51 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑这篇文章经过编辑,因为我已经专注于这个问题,但我还没有解决它

你好,

当我通过pycharm运行测试时,我遇到了一个引发以下错误的问题:

django.core.exceptions.ImpropertlyConfigured:请求的设置已安装\u应用程序,但未配置设置。在访问设置之前,必须定义环境变量DJANGO_SETTINGS_MODULE或调用SETTINGS.configure()

问题似乎出在pycharm上,因为我刚刚运行了./manage.py test,测试成功执行

我使用pycharm设置的配置有:

  • 脚本路径:/MainFolder/MainProjects/project1 backend/tests/test\u models.py
  • 环境变量:PYTHONUNBUFFERED=1;DJANGO_SETTINGS_MODULE=project1backend.SETTINGS注意此文件所属的文件夹,而不是project1 backend
  • Python解释器:Python 3.8 (MainFolder)~/MainFolder/MainProjects/bin/python
  • 工作目录:/Users/myname/MainFolder/MainProjects/project1后端
  • 将内容根添加到PYTHONPATH:未选中
  • 将源根添加到PYTHONPATH:已选定

Project hierarchy编辑测试文件应该是__init__.py而不是__inity__.py。我的.env文件位于project1后端文件夹中。我在venv中操作以执行./manage.py测试

#import from Model class
from django.test import SimpleTestCase
from django.db import models

#User model
class User(models.Model):

    email = models.CharField(max_length=256, primary_key=True)
    first_name = models.CharField(max_length=256)
    last_name = models.CharField(max_length=256)

    def __str__(self):
        return self.email # this defaults to the email address


from django.test import TestCase
from app.models import User

class TestModels(TestCase):

    def setUp(self):
      self.user1 = User.objects.create(
          email="m@gmail.com",
          first_name="misha",
          last_name="lee"
      )

    def test_app_user(self):
        self.setUp()
        self.assertTrue(isinstance(self, User)

编辑

     Traceback (most recent call last):
      File "/Users/myname/MainFolder/MainProjects/project1-backend/tests/test_models.py", line 4, in <module>
        from app.models import User
      File "/Users/myname/MainFolder/MainProjects/project1-backend/app/models.py", line 6, in <module>
        class User(models.Model):
      File "/Users/myname/MainFolder/MainProjects/lib/python3.8/site-packages/django/db/models/base.py", line 107, in __new__
        app_config = apps.get_containing_app_config(module)
      File "/Users/myname/MainFolder/MainProjects/lib/python3.8/site-packages/django/apps/registry.py", line 252, in get_containing_app_config
        self.check_apps_ready()
      File "/Users/myname/MainFolder/MainProjects/lib/python3.8/site-packages/django/apps/registry.py", line 134, in check_apps_ready
        settings.INSTALLED_APPS
      File "/Users/myname/MainFolder/MainProjects/lib/python3.8/site-packages/django/conf/__init__.py", line 76, in __getattr__
        self._setup(name)
      File "/Users/myname/MainFolder/MainProjects/lib/python3.8/site-packages/django/conf/__init__.py", line 57, in _setup
        raise ImproperlyConfigured(
    django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
Process finished with exit code 1

我还包括

INSTALLED_APPS = [
    'django.contrib.admin',     
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'app.apps.AppConfig'
]

*注意:我自己也尝试过“应用程序”,但没有效果

提前感谢您的帮助!注意,我已经查看了PYTHONPATH的答案以及__init__.py答案,发现它们没有帮助。不过,我确实认为这与路径有关

我还研究了这个资源: Running Django tests in PyCharm 但是我发现答案并没有解决我的问题


Tags: djangoinpytestselfappmodelsline
1条回答
网友
1楼 · 发布于 2024-10-03 17:20:51

我在SO上搜索了几天,因为我不明白为什么在运行./manage.py test时,一切都正常,测试也执行了。似乎设置配置正确(即DJANGO_设置_模块)。然而,当我开始研究错误、调试并找到可能的答案时,我发现Pycharm/pytest没有识别settings.py文件中的设置(或任何相关设置)。甚至在我尝试通过在PyCharm中“编辑”测试的配置来添加环境变量(即DJANGO_设置_模块)之后

解决方案 首先,我通过导航到PyCharm中的Run/Debug Configurations并使用左上角的“-”按钮删除测试,删除了所有以前的测试配置(PyCharm Professional 2020.1)。 我必须使用一个插件EnvFile,它在运行测试之前通过导航到PyCharm > Preferences > Plugins并搜索EnvFile启动。然后,我添加了隐藏的.env文件,用于存储所有环境变量

这让我想到:

 Error raise AppRegistryNotReady("Apps aren't loaded yet.")
              django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

我在Django docshttps://docs.djangoproject.com/en/3.0/ref/applications/的帮助下纠正了这个问题,并添加了Django.setup()来填充应用程序注册表

此外,我发现关于这方面的文档并不多,请特别注意您正在使用的pytest、nosetest等测试类型以及您在tangent中使用的导入语句。此外,请注意TestCase和SimpleTestCase之间的区别,因为后者不需要访问数据库

相关问题 更多 >