Estoy usando la última versión de django django 2.2.12
Traté de buscar errores antes de la migración con el comando
python3 manage.py check
pero luego arroja el siguiente error
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
Creé un nuevo proyecto Django en Ubuntu 20.04 usando Python 3.7 y Django 3.1.5. Cuando ejecuto ./manage.py migrate
migrate o ./manage.py makemigrations
. Me sale el error en la pregunta original. Descubrí que cambiar a Python 3.8 corrige el error.
Estoy usando Ubuntu 20.04
, python 3.8.5
y Django 3.0.5
. Tuve el mismo error después de instalar el paquete djongo
para trabajar con MongoDB
, el mismo error pero no la misma causa, sin embargo, pude corregir el error convirtiendo BASE_DIR / 'db.sqlite3' en una cadena
str(BASE_DIR / 'db.sqlite3' )
si usa la plantilla startproject de Django 3.1. debe usar la función str() en su archivo de configuración.
encuentra este código en el archivo de configuración
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } }
cambiarlo a:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': str(BASE_DIR / "db.sqlite3"), } }
o puede usar os.path.join(BASE_DIR, 'db.sqlite3'),
Me encontré con esto por sorpresa. Estaba generando una serie de proyectos de Django en 3.1.3 fuera de un entorno virtual e hice una instalación pip rápida que redujo mi requisito de Django a 3.05. Los ajustes de configuración anteriores se veían así
""" 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
y después de la instalación, los scripts ./manage.py subsiguientes de repente comenzaron a darme el mismo rastreo. La reconstrucción de mi proyecto configuró mi configuración para que se vea así:
""" 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__)))
Cuál fue el aviso. Parece que el script de generación de configuraciones detecta cuándo su entorno se adapta mejor a un mecanismo de construcción de ruta u otro.
Desafortunadamente, envolver str() alrededor de las rutas me permitió emitir algunos comandos ./manage sin error, pero ya no podía iniciar el servidor en ningún otro proyecto que creé sin rastros mucho peores.
Me pregunto si hay algo como un > pip revert --time=-2hrs.
Terminé desinstalando el último par de instalaciones de paquetes y haciendo una instalación explícita de Django 3.1.3 para volver a donde estaba. tiempo de congelación de pepitas.
Asegúrese de haber importado el sistema operativo en la configuración de nivel de proyecto.py:
import os
Agregue lo siguiente en BASES DE DATOS dentro de settings.py:
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
En las últimas versiones de django, podemos hacer las siguientes configuraciones usando str() :
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': str(BASE_DIR / "db.sqlite3"), } }
Parece que especificó una configuración de base de datos con un objeto Path
, conviértalo en str()
.