Gặp lỗi typeError trong dự án django
Aug 17 2020
Tôi đã tạo một môi trường ảo cho dự án mới của mình, cài đặt django và bắt đầu dự án mới. Tuy nhiên, bất cứ khi nào tôi chạy một dòng mã với management.py tôi đều gặp lỗi dài này.
PS D:\My stuff\Website development\Isow website\isow> python manage.py makemigrations
No changes detected
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 "C:\Users\rahma\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
utility.execute()
File "C:\Users\rahma\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\management\__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\Users\rahma\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\management\base.py", line 336, in run_from_argv
connections.close_all()
File "C:\Users\rahma\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\utils.py", line 224, in close_all
connection.close()
File "C:\Users\rahma\AppData\Local\Programs\Python\Python37\lib\site-packages\django\db\backends\sqlite3\base.py", line 248, in close
if not self.is_in_memory_db():
File "C:\Users\rahma\AppData\Local\Programs\Python\Python37\lib\site-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 "C:\Users\rahma\AppData\Local\Programs\Python\Python37\lib\site-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 'WindowsPath' is not iterable
Nhập cơ sở dữ liệu:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
Trả lời
5 iklinac Aug 17 2020 at 11:33
Có vẻ như NAME đang được chuyển đổi thành đối tượng pathlib.Path ( WindowsPath ) thay vì chuỗi mà sau đó không thể được sử dụng trong Django theo cách giống như os.path mong đợi chuỗi (Không chắc chắn 100% vì đã không điều tra sâu)
Vì vậy, truyền trong chuỗi sẽ thích hợp
'NAME': str(os.path.join(BASE_DIR, "db.sqlite3"))
2 FirePanda Oct 05 2020 at 17:48
Đảm bảo rằng bạn thực sự thực hiện lệnh của mình trong venv (bạn sẽ thấy (venv))
Nếu bạn đúng như @iklinac đã nói, điều này sẽ khắc phục sự cố của bạn:
'NAME': str(os.path.join(BASE_DIR, "db.sqlite3"))