現状
Djangoでファイルをアップロードする手順
こちらを参考にしています。
config/media/imagesというフォルダ構成になっています。
ソースコード
config/settings.py
import os BASE_DIR = Path(__file__).resolve().parent.parent MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/'
config/urls.py
urlpatterns = [ 省略 ]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
mysite/models.py(画像のDB保存先model)
class User(AbstractBaseUser): account_image = models.ImageField( default="https://cdn2.aprico-media.com/production/imgs/images/000/029/940/original.png?1553946576", upload_to='images/', null=True)
mypage/forms.py(mysiteのmodelを更新用のform)
# 画像アップロード(modelの定義) from mysite.models import User class UploadForm(forms.ModelForm): class Meta: model = User fields = ('account_image',)
mypage/view.py(profile_edit関数)
編集ページに遷移する処理、アップロード用のformを表示 def profile_edit(request): try: context = {} if request.method == "POST": # 画像アップロード form = UploadForm(request.POST, request.FILES,) context["form"] = form except: print("プロフィールデータが取得出来ませでした") return render(request, "mypage/profile_edit.html", context)
profile_edit.html
<!-- mypage:profile_email_saveはviews.pyのprofile_email_save --> <form method="POST" action="{% url 'mypage:profile_email_save' %}" enctype="multipart/form-data"> {% csrf_token %} <div class="d-flex flex-column px-4 pb-2 pt-2"> <label><strong>プロフィール画像</strong></label> {{ form.as_p }} </div> <div class="px-4 pt-2 pb-3"> <button name="email_edit" type="submit" class="btn btn-primary" value="{{user.id}}">送信</button> </div> </form>
mypage/view.py(profile_email_save関数)
def profile_email_save(request): # ユーザー情報DB変更処理 if request.method == "POST": profile_id = request.POST["email_edit"] account_image = request.POST.get("account_image") print(account_image, "aaaaaaa") User.objects.filter(id=profile_id).update(account_image=account_image) else: print("ユーザー情報が取得出来ませでした") return redirect("/mypage")
問題点
ファイルを選択すると画像をmacから選択でき右にファイル名も表示されます。
**{{ form.as_p }}**の中身はこちらです
<label for="id_account_image">Account image:</label> <input accept="image/*" id="id_account_image" name="account_image" type="file">
email_editボタンで送信するとprint(account_image, "aaaaaaa")はNoneが返されます。
ファイル名まで表示できているのでaccount_image値を取得したかったのですが、
どこで処理が間違っているのかわかりません。
コードをたくさん載せてしまいすみません。ご教授よろしくお願いします。
あなたの回答
tips
プレビュー