Django类型错误:类型“PosixPath”的参数不可迭代

czfnxgou  于 2023-02-14  发布在  Go
关注(0)|答案(7)|浏览(173)

我使用的是最新版本的django django 2.2.12
我尝试在迁移前使用以下命令检查错误
python3 manage.py check
但它会抛出下面的错误

Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    main()
  File "manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/usr/lib/python3/dist-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/usr/lib/python3/dist-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/lib/python3/dist-packages/django/core/management/base.py", line 336, in run_from_argv
    connections.close_all()
  File "/usr/lib/python3/dist-packages/django/db/utils.py", line 224, in close_all
    connection.close()
  File "/usr/lib/python3/dist-packages/django/db/backends/sqlite3/base.py", line 248, in close
    if not self.is_in_memory_db():
  File "/usr/lib/python3/dist-packages/django/db/backends/sqlite3/base.py", line 367, in is_in_memory_db
    return self.creation.is_in_memory_db(self.settings_dict['NAME'])
  File "/usr/lib/python3/dist-packages/django/db/backends/sqlite3/creation.py", line 12, in is_in_memory_db
    return database_name == ':memory:' or 'mode=memory' in database_name
TypeError: argument of type 'PosixPath' is not iterable
shyt4zoc

shyt4zoc1#

确保在项目级www.example.com中导入了ossettings.py:

import os

在www.example.com的数据库中添加以下内容settings.py:

'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

在django的最新版本中,我们可以使用**str()**进行以下设置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': str(BASE_DIR / "db.sqlite3"),
    }
}
wmvff8tz

wmvff8tz2#

如果你使用Django3.1startproject模板,你必须在你的设置文件中使用**string()**函数。
在设置文件中找到此代码

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

将其更改为:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': str(BASE_DIR / "db.sqlite3"),
    }
}

或者您可以使用os. path. join(BASE_DIR,"db.sqlite3"),

ecbunoof

ecbunoof3#

听起来像是使用Path对象指定了数据库设置,请将其转换为str()

1dkrff03

1dkrff034#

我正在使用Ubuntu 20.04python 3.8.5Django 3.0.5。在安装djongo包以使用MongoDB后,我遇到了相同的错误,相同的错误但原因不同,但是,我能够通过将BASE_DIR /“db.sqlite3”转换为字符串来修复该错误
字符串(BASE_DIR / 'db.sqlite3')

wsewodh2

wsewodh25#

我自己也很意外地遇到了这个问题。我在3.1.3中在虚拟环境之外生成了一系列Django项目,并做了一个快速的pip安装,这将我的Django需求降到了3.05。

"""                                                                                                  
Django settings for config project.                                                                                                                                                                  
Generated by 'django-admin startproject' using Django 3.1.3.                                         
"""                                                                                                     
from pathlib import Path                                                                             
                                                                                                     
# Build paths inside the project like this: BASE_DIR / 'subdir'.                                     
BASE_DIR = Path(__file__).resolve().parent.parent

在安装之后,随后的./manage.py脚本突然开始给我同样的回溯。重建我的项目时,我的设置如下所示:

"""                                                                                                  
Django settings for config project.                                                                                                                                                                      
Generated by 'django-admin startproject' using Django 3.0.5.                                         
"""                                                                                                  
                                                                                                     
import os                                                                                            
                                                                                                     
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)                              
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

这就是提示。似乎设置生成脚本会检测到您的环境何时更适合一种路径构造机制或另一种。
不幸的是,将str()封装在路径周围使我可以发出一些./manage命令而不出错,但是我无法在创建的任何其他项目中启动服务器而不进行更糟糕的跟踪。
我想知道是否有像〉pip revert--time= -2hrs这样的东西。
我最终卸载了最后几个包安装,并进行了显式Django 3.1.3安装,以回到我原来的位置。pip冻结时间。

5m1hhzi4

5m1hhzi46#

这对我很有效:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
nkhmeac6

nkhmeac67#

我在Ubuntu 20.04中使用Python 3.7和Django 3.1.5创建了一个新的Django项目。当我运行./manage.py migrate./manage.py makemigrations时,我得到了原始问题中的错误。我发现切换到Python 3.8可以修复这个错误。

相关问题