質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

0回答

729閲覧

Django 複数formをView内で1つのclassとして使用する方法について

akane_emo

総合スコア30

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/06/29 06:30

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 %}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問