Djangoフレームワークについて勉強しています.
画像付きの投稿をする際に参考にしているものとsettings.pyの記述が異なり,errorが発生しました.
まずBASE_DIRに関する記述ですが参考書では
django
1BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 2 3DATABASES = { 4 'default': { 5 'ENGINE': 'django.db.backends.sqlite3', 6 'NAME': os.path.join(BASE_DIR / 'db.sqlite3'), 7 } 8}
と記述されており私のsettings.pyでは
django
1BASE_DIR = Path(__file__).resolve().parent.parent 2 3DATABASES = { 4 'default': { 5 'ENGINE': 'django.db.backends.sqlite3', 6 'NAME': BASE_DIR / 'db.sqlite3', 7 } 8}
と記述されていました.
参考書に従ってsettings.pyの最下部に
django
1BASE_DIR = Path(__file__).resolve().parent.parent 2 3DATABASES = { 4 'default': { 5 'ENGINE': 'django.db.backends.sqlite3', 6 'NAME': BASE_DIR / 'db.sqlite3', 7 } 8} 9 10MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 11MEDIA_URL = '/media/'
と
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
の2行を追加しましたがこれではosが見つかりませんということでそもそもコマンドプロンプトからseverを起動することが出来ませんでした.
なので自分なりにこうかなと考え
django
1BASE_DIR = Path(__file__).resolve().parent.parent 2 3DATABASES = { 4 'default': { 5 'ENGINE': 'django.db.backends.sqlite3', 6 'NAME': BASE_DIR / 'db.sqlite3', 7 } 8} 9 10MEDIA_ROOT = BASE_DIR, 'media' 11MEDIA_URL = '/media/'
このように記述するとseverの起動には成功しましたが画像の新規投稿をすると以下のようなerrorが発生しました.
TypeError at /post_create
_getfullpathname: path should be string, bytes or os.PathLike, not tuple
このエラーについて調べてみるとpathはタプルではなく文字列で扱ってくれという意味らしいですが,
そもそもフレームワークの記述ルールが間違っているのではないかと考えておりますので,解決方法を教えていただけないでしょうか.
models.py
python
1 2class Post(models.Model): 3 author = models.ForeignKey(User, on_delete=models.PROTECT, blank=False) 4 title = models.CharField('タイトル', max_length=50) 5 content = models.TextField('内容', max_length=1000) 6 category = models.ForeignKey('Category', on_delete=models.PROTECT) 7 thumbnail = models.ImageField(upload_to = 'images/', blank=True) 8 created_at = models.DateTimeField(auto_now_add=True) 9 updated_at = models.DateTimeField(auto_now=True) 10
settings.py
python
1BASE_DIR = Path(__file__).resolve().parent.parent 2DATABASES = { 3 'default': { 4 'ENGINE': 'django.db.backends.sqlite3', 5 'NAME': BASE_DIR / 'db.sqlite3', 6 } 7} 8 9MEDIA_ROOT = BASE_DIR, 'media' 10MEDIA_URL = '/media/' 11
ちなみにimport osをして参考書通りにsettings.pyのBASE_DIRの内容を書き換えてrunseverしましたが
'NAME': BASE_DIR / 'db.sqlite3',
TypeError: unsupported operand type(s) for /: 'str' and 'str'
このようなエラーがでました.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。