前提・実現したいこと
python/djangoでSNSみたいなwebアプリを開発中です。
CreateView/ModelsForm/Modelsを使ってメディアファイルをアップロードしようとしているのですが、プロジェクトのmediaディレクトリにファイルが保存されません。
どうにか画像等をアップロードできるようにできませんか?
試したこと
admin管理サイトからなら画像/ファイルのアップロードができ、
該当のディレクトリに保存が確認できました。
ということはmodelには問題ないかと思っています。
該当のソースコード
models
python
1from django.db import models 2from accounts.models import CustomUser 3 4# Create your models here. 5from django.urls import reverse 6 7 8class Prof_Type(models.Model): 9 USER_ID = models.ForeignKey(CustomUser, verbose_name='ユーザーID', on_delete=models.PROTECT) 10 USER_NAME = models.CharField(verbose_name='名前', max_length=40) 11 USER_IMG = models.ImageField(verbose_name='写真', upload_to='prof/', blank=True, null=True) 12 USER_VOICE = models.FileField(verbose_name='ボイス', upload_to='prof/', blank=True, null=True) 13 14 class Meta: 15 verbose_name_plural = 'プロフ' 16 17 def __str__(self): 18 return self.USER_NAME 19
forms
python
1from django import forms 2from .models import Prof_Type 3 4 5class Prof_Type_Form(forms.ModelForm): 6 class Meta: 7 model = Prof_Type 8 fields = ( 9 'USER_NAME', 'USER_IMG', 'USER_VOICE', 10 ) 11
views
python
1 2from django.contrib.auth.mixins import LoginRequiredMixin 3from django.urls import reverse_lazy 4from django.views import generic 5from .forms import Prof_Type_Form 6from .models import Prof_Type 7from django.contrib import messages 8 9# Create your views here. 10 11class Prof_Edit_View(LoginRequiredMixin, generic.CreateView): 12 template_name = "prof_edit.html" 13 form_class = Prof_Type_Form 14 model = Prof_Type 15 success_url = reverse_lazy('prof:prof_edit') 16 17 def form_valid(self, form): 18 prof = form.save(commit=False) 19 prof.USER_ID = self.request.user 20 prof.save() 21 messages.success(self.request, 'プロフを作成しました。') 22 return super().form_valid(form) 23 24 def form_invalid(self, form): 25 messages.error(self.request, "プロフの作成に失敗しました。") 26 return super().form_invalid(form) 27
URL
python
1from django.conf import settings 2from django.contrib import admin 3from django.contrib.staticfiles.urls import static 4from django.urls import path, include 5 6urlpatterns = [ 7 path('admin/', admin.site.urls), 8 path('', include('prof.urls')), 9 path('accounts/', include('allauth.urls')), 10] 11 12urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 13
settings
python
1BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 2 3MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 4 5MEDIA_URL = '/media/'

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/05 15:40