J'utilise la dernière version de django django 2.2.12
J'ai essayé de vérifier les erreurs avant la migration avec la commande
python3 manage.py check
mais alors il jette l'erreur ci-dessous
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
4 Réponses :
On dirait que vous avez spécifié un paramètre de base de données avec un objet Path
, convertissez-le en str()
.
si vous utilisez le modèle startproject de Django 3.1. vous devez utiliser la fonction str () dans votre fichier de paramètres.
trouver ce code dans le fichier de paramètres
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': str(BASE_DIR / "db.sqlite3"), } }
changez-le en:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } }
ou vous pouvez utiliser os.path.join (BASE_DIR, 'db.sqlite3'),
Je viens de rencontrer cela par surprise moi-même. Je générais une série de projets Django en 3.1.3 en dehors d'un environnement virtuel et j'ai effectué une installation rapide de pip qui a ramené mes besoins Django à 3.05. Les paramètres de configuration précédents ressemblaient à ceci
""" 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__)))
et après l'installation, les scripts ./manage.py suivants ont soudainement commencé à me donner cette même trace. La reconstruction de mon projet a configuré mes paramètres pour ressembler à ceci:
""" 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
Quel était le bout. Il semble que le script de génération de paramètres détecte quand votre environnement est mieux adapté à un mécanisme de construction de chemin ou à l'autre.
Malheureusement, enrouler str () autour des chemins m'a permis d'émettre quelques commandes ./manage sans erreur, mais je ne pouvais plus lancer le serveur dans aucun autre projet que j'ai créé sans tracebacks bien pires.
Je me demande s'il y a quelque chose comme un> pip revert --time = -2hrs.
J'ai fini par désinstaller les deux dernières installations de paquets et j'ai fait une installation explicite de Django 3.1.3 pour revenir là où j'étais. temps de gel de pip.
Assurez-vous que vous avez importé le système d' exploitation dans settings.py au niveau du projet:
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
Ajoutez ce qui suit dans DATABASES dans settings.py:
import os
On dirait que vous avez spécifié un paramètre de base de données avec un objet
Path
, convertissez-le enstr()
.Je n'ai rien fait de tel. J'ai vu quelques changements dans le django 2.2.12 où ils ont remplacé le module os par le module pathlib. Je suppose que cela cause le problème. J'ouvre mon fichier settings.py pour que vous m'aidiez avec lui
@AlexHall J'ai tenu compte de votre solution et je l'ai convertie en une chaîne qui a fonctionné pour moi. Merci de votre aide
OK, j'ai fait une réponse pour que les gens puissent voir que cela a été résolu. Il peut être bon d'afficher la partie pertinente de vos paramètres au cas où d'autres personnes rechercheraient cette erreur.