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

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

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

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

Django

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

ファイル

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

Python 3.x

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

コードレビュー

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

受付中

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

akane_emo
akane_emo

総合スコア0

CSV

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

Django

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

ファイル

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

Python 3.x

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

コードレビュー

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

0回答

0評価

0クリップ

12閲覧

投稿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

urlpatterns = [ path('', UploadView.as_view(), name='index_webedi') ] if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

setting.py

python

# アップロードファイルの保存先 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

models.py

python

# ファイルアップロード class FileUpload(models.Model): description = models.CharField(max_length=255, blank=True) document = models.FileField(upload_to='documents/') uploaded_at = models.DateTimeField(auto_now_add=True)

forms.py

python

from django import forms from app.models import FileUpload class SelectFileForm(forms.Form): data = [ ('1', 'select1'), ('2', 'select2'), ('3', 'select3') ] choice = forms.ChoiceField(label='データ選択', \ choices=data, widget=forms.RadioSelect()) class DocumentForm(forms.ModelForm): class Meta: model = FileUpload fields = ('description', 'document', )

views
(ファイルが読み込めない&ファイル読込の画面が作成できなかったため条件分岐後の
格納フォルダ別の処理はまだ記述出来ていません)

python

from django.shortcuts import render, redirect from django.conf import settings from django.views.generic import TemplateView from django.core.files.storage import FileSystemStorage from .models import FileUpload from .forms import SelectFileForm, DocumentForm def upload(request): if request.method == 'POST': form = DocumentForm(request.POST, request.FILES) if form.is_valid(): form.save() return redirect('index') else: form = DocumentForm() return render(request, 'app/index.html', { 'form': form }) class UploadView(TemplateView): docu_class = DocumentForm select_class = SelectFileForm template_name = 'app/index.html' def get_context_data(self, **kwargs): context= TemplateView.get_context_data(self, **kwargs) form = self.docu_class(self.request.POST, self.request.FILES or None) form2 = self.select_class(self.request.POST['choice']) context.update({'form2':form2}) return context def __init__(self): self.params = { 'form': SelectFileForm(), 'result': None } def get(self, request): return render(request, 'app/index.html', self.params) def post(self, request): context = self.get_context_data(train_form=select_form, file_form=file_form) ch = request.POST['choice'] if ch == '1': self.params['result'] = ' selected1:' + ch elif ch == '2': self.params['result'] = ' selected2:' + ch elif ch == '3': self.params['result'] = ' selected3:' + ch upload(request) return render(self.request, 'app/index.html', self.params)

index.html

python

{% extends 'app/layout.html' %} {% block title %}test{% endblock %} {% block content %} <div class="container"> <h2 class="text-center">TEST</h2> <p class="h5">データ選択</p> <form method="post" enctype="multipart/form-data"> {% csrf_token %} {{ result }} {{ form }} <button type="submit" class="btn btn-sm btn-primary">種類選択</button> </form> <form method="post" enctype="multipart/form-data"> {% csrf_token %} <input type=file” name=“testfile”> {{ form2 }} <button type="submit" class="btn btn-sm btn-primary">アップロード</button> </form> </div> {% endblock %}

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

CSV

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

Django

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

ファイル

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

Python 3.x

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

コードレビュー

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