Django TypeError:类型'PosixPath'的参数不可迭代



我使用的是最新版本的djangodjango 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

确保在项目级别设置中导入os。py:

import os

在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"),
}
}

如果您使用Django 3.1的startproject模板。您必须在设置文件中使用str((函数。

在设置文件中找到此代码

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'(,

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

我使用的是Ubuntu 20.04python 3.8.5Django 3.0.5。在我安装djongo包以使用MongoDB后,我也遇到了同样的错误,同样的错误但原因不同,然而,我能够通过将BASE_DIR/"db.sqlite3"转换为字符串来修复错误

str(BASE_DIR/'db.sqlite3'(

它对我有效:

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

我刚刚意外地遇到了这个问题。我在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((包装在路径上允许我发布一些/管理命令时不会出错,但如果没有更糟糕的回溯,我就无法再在我创建的任何其他项目中启动服务器。

我想知道是否有类似于>pip revert--时间=-2小时。

我最终卸载了最后几次软件包安装,并进行了明确的Django 3.1.3安装,回到了原来的位置。pip冻结时间。

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

最新更新