Mendapatkan kesalahan typeError dalam proyek django

Aug 17 2020

Saya membuat lingkungan virtual untuk proyek baru saya, menginstal django dan memulai proyek baru. Namun, setiap kali saya menjalankan baris kode dengan manage.py saya mendapatkan kesalahan panjang ini.

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

Entri Database:

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

Jawaban

5 iklinac Aug 17 2020 at 11:33

Tampaknya NAME sedang dikonversi ke objek pathlib.Path ( WindowsPath ) alih-alih string yang kemudian tidak dapat digunakan di Django dengan cara yang sama seperti yang diharapkan os.path string (Tidak 100% yakin karena tidak menyelidiki secara mendalam)

Jadi casting dalam string akan sesuai

'NAME': str(os.path.join(BASE_DIR, "db.sqlite3"))
2 FirePanda Oct 05 2020 at 17:48

Pastikan Anda benar-benar menjalankan perintah Anda di venv (Anda harus lihat (venv))

Jika Anda kemudian seperti yang dikatakan @iklinac, ini akan memperbaiki masalah Anda:

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