0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【初心者】djangoでつまづいたところと解決策

Last updated at Posted at 2022-05-27

記事の目的

djangoを勉強していく上でつまづいたところや覚えておきたいことを備忘録的に記す

つまづいたところ

画像のアップロード

やりたいこと

モデルを以下のように作成してフォームからデータを追加できるようにしたい

models.py
class ImageModel(models.Model):
    name = models.CharField(max_length=100)
    img = models.ImageField(upload_to='')
    author = models.CharField(max_length=100, null=True)

エラー

以下の画像のように this field is requiredと表示されてしまう

スクリーンショット 2022-05-27 11.58.21.png

解決策

htmlファイルのformの表記を

<form action="" method="POST" >
↓
<form action="" method="POST" enctype="multipart/form-data">

と変更する

アップロードされた画像を加工して表示する

やりたいこと

formを用いてアップロードされた画像を加工して加工前と後のものを両方表示する

####つまづいたこと

cv2でオープンして加工しようとしたが以下のエラーが吐かれた
(MEDIA_URL = 'medi'として実行してみる)

####解決策
MEDIA_URL, MEDIA_ROOTの設定の時に何も考えずに設定していたが同じにしないといけなかった.

setting.py
#画像を表示するときにurlの一部となる(あまりわかってない)
MEDIA_URL = 'media/'

#画像がアップロードされた時の保存先
#本番環境でも使える書き方(DEBUG = True/Falseで条件分岐)

if DEBUG:
    MEDIA_ROOT = BASE_DIR / 'media'
else:
    MEDIA_ROOT = f'/var/www/{BASE_DIR.name}/media'

結局MEDIA_ROOTは画像のurlの一部になるもので表示する際に必要となる.
画像をアップロードするだけで終わりならべつに問題はなかったが後からそのurlからパスを取ってきて加工するためには実際に保存する先(MEDIA_ROOT)と同じにしなければならない.

またurlからpathを取得するときは画像のurlとBASE_DIRから成るので以下のようにstr型にcastして結合しなければならない

views.py
from django.conf import settings
path = str(settings.BASE_DIR) + url
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?