Django環境での作成の初心者です。参考書やネットで調べて私なりにやってみたのですがわからないので
教えて頂けないでしょうか。
前提・実現したいこと
Django環境にてradioボタンの選択状況によって読み込んだCSVファイルの別々のフォルダに
格納する機能を作成したいと思っています。
forms.pyでradioボタンのclassとfile読込のclassの2つを用意し、その2つをViewで用意したclass内で使用したいと思っています。
困っていること
forms.pyで作成した2つのclassをtemplatesで設定するのに「get_context_data」をオーバーライド
するところまでは分かったのですが、記述方法がダメなようで上手く呼び出せません。
class UploadView(TemplateView):のdef get、def postを使用して作成したいのですが
上手くいきません。
私のただの知識不足なのですが自分で調べても行き詰ってしまって。。
ご教授お願いできませんでしょうか。
よろしくお願いします。
該当のソースコード
app/urls.py
python
1urlpatterns = [ 2 path('', UploadView.as_view(), name='index_webedi') 3] 4 5if settings.DEBUG: 6 urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
setting.py
python
1# アップロードファイルの保存先 2MEDIA_URL = '/media/' 3MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
models.py
python
1# ファイルアップロード 2class FileUpload(models.Model): 3 description = models.CharField(max_length=255, blank=True) 4 document = models.FileField(upload_to='documents/') 5 uploaded_at = models.DateTimeField(auto_now_add=True)
forms.py
python
1from django import forms 2from app.models import FileUpload 3 4 5 6class SelectFileForm(forms.Form): 7 data = [ 8 ('1', 'select1'), 9 ('2', 'select2'), 10 ('3', 'select3') 11 ] 12 13 choice = forms.ChoiceField(label='データ選択', \ 14 choices=data, widget=forms.RadioSelect()) 15 16 17class DocumentForm(forms.ModelForm): 18 class Meta: 19 model = FileUpload 20 fields = ('description', 'document', )
views
(ファイルが読み込めない&ファイル読込の画面が作成できなかったため条件分岐後の
格納フォルダ別の処理はまだ記述出来ていません)
python
1from django.shortcuts import render, redirect 2from django.conf import settings 3from django.views.generic import TemplateView 4from django.core.files.storage import FileSystemStorage 5from .models import FileUpload 6from .forms import SelectFileForm, DocumentForm 7 8 9def upload(request): 10 if request.method == 'POST': 11 form = DocumentForm(request.POST, request.FILES) 12 if form.is_valid(): 13 form.save() 14 return redirect('index') 15 else: 16 form = DocumentForm() 17 return render(request, 'app/index.html', { 18 'form': form 19 }) 20 21class UploadView(TemplateView): 22 23 docu_class = DocumentForm 24 select_class = SelectFileForm 25 template_name = 'app/index.html' 26 27 def get_context_data(self, **kwargs): 28 context= TemplateView.get_context_data(self, **kwargs) 29 form = self.docu_class(self.request.POST, self.request.FILES or None) 30 form2 = self.select_class(self.request.POST['choice']) 31 context.update({'form2':form2}) 32 return context 33 34 def __init__(self): 35 self.params = { 36 'form': SelectFileForm(), 37 'result': None 38 } 39 40 def get(self, request): 41 return render(request, 'app/index.html', self.params) 42 43 def post(self, request): 44 context = self.get_context_data(train_form=select_form, 45 file_form=file_form) 46 47 ch = request.POST['choice'] 48 if ch == '1': 49 self.params['result'] = ' selected1:' + ch 50 elif ch == '2': 51 self.params['result'] = ' selected2:' + ch 52 elif ch == '3': 53 self.params['result'] = ' selected3:' + ch 54 55 upload(request) 56 57 58 return render(self.request, 'app/index.html', self.params)
index.html
python
1{% extends 'app/layout.html' %} 2 3{% block title %}test{% endblock %} 4 5 6{% block content %} 7<div class="container"> 8 <h2 class="text-center">TEST</h2> 9 <p class="h5">データ選択</p> 10 11 <form method="post" enctype="multipart/form-data"> 12 {% csrf_token %} 13 {{ result }} 14 {{ form }} 15 <button type="submit" class="btn btn-sm btn-primary">種類選択</button> 16 </form> 17 <form method="post" enctype="multipart/form-data"> 18 {% csrf_token %} 19 <input type=“file” name=“testfile”> 20 {{ form2 }} 21 <button type="submit" class="btn btn-sm btn-primary">アップロード</button> 22 </form> 23 24</div> 25{% endblock %}
あなたの回答
tips
プレビュー