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

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

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

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

Q&A

0回答

274閲覧

django : 検索した結果(request.GET.get('query')をForm.pyに変数を引き渡したい。

gsachio

総合スコア0

Django

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

0グッド

0クリップ

投稿2020/05/04 14:13

編集2020/05/07 10:28

前提・実現したいこと

djangoについての質問となります。

※Viewを関数からClassに変更したため、内容を全体的に更新いたしました。

【処理の流れ】
①VIEWのclass 商品Editは、商品編集(追加や変更)をするページとなります。
②現在、商品編集ページでの追加や変更処理は正常に動作しております。
③今回、商品編集ページでは、メーカーNOを検索するための入力項目があります。
④検索項目にメーカーNOを入力して検索ボタンをおすと、メーカーNO_ARの絞り込みをしてSELECTフォームを対象の1件だけをリスト表示する。

現在、上記④がうまく処理できない状況となっております。
get_form_kwargsを使用して、SELECTフォームのリストに表示されるメーカ名を1件にしたいのですが、現在は登録されているメーカー名がすべてSELECTフォームのリストに表示されてしまっている状態です。

いろいろ試したのですが、なにをやってもうまくいかないため、もし良い解決策があればご教授をお願いします。

該当のソースコード

【モデルファイル名:models.py】 class メーカー情報(models.Model): メーカーNO = models.CharField('メーカーNO', max_length=10, primary_key=True) メーカー名 = models.CharField('メーカー名', max_length=255) def __str__(self): return self.メーカー名 class 商品情報(models.Model): 商品ID = models.AutoField(primary_key=True) 商品名 = models.CharField('商品名', max_length=255) メーカーNO_AR = models.ForeignKey('メーカー情報', related_name='メーカーNO_AR', verbose_name='メーカー名', to_field='メーカーNO', on_delete=models.PROTECT)
【フォームファイル名:forms.py】 from django.forms import ModelForm from django import forms from django.utils import timezone from emr.models import * class メーカーForm(ModelForm): class Meta: model = メーカー情報 fields = ('メーカーNO', 'メーカー名', '登録者') class 商品Form(ModelForm): class Meta: model = 商品情報 fields = ('商品ID', ’商品名’, 'メーカーNO_AR') def __init__(self, *args, **kwargs): id = kwargs.pop('q_word') super(商品Form,self).__init__(*args, **kwargs) self.fields['メーカーNO_AR'].queryset = メーカー情報.objects.filter(メーカーNO=id)
【ビューファイル名:views.py】 from django.shortcuts import render, get_object_or_404, redirect from django.http import HttpResponse from django.contrib.auth.decorators import login_required from emr.models import メーカー情報, 商品情報 from emr.forms import メーカーForm,商品Form from django.db.models import Q from django.views.generic.edit import FormView from django.views import generic class 商品Edit(generic.TemplateView, FormView): form_class = 商品Form() def __init__(self): self.params = { 'form':商品Form() } def get_form_kwargs(self): q_word = request.GET.get('query') kwargs = super(商品Edit,self).get_form_kwargs() kawrgs.update({'q_word': q_word}) return kwargs def get(self, request, 商品ID=None, メーカーNO_AR=None, *args, **kwargs): if 商品ID: 商品_cnt = get_object_or_404(商品情報, pk=商品ID) else: 商品_cnt = 商品情報() form = 商品Form(instance=商品_cnt) return render(request,'emr/商品_edit.html', dict(form=form, 商品ID=商品ID)) def post(self, request, 商品ID=None, メーカーNO_AR=None, *args, **kwargs): if 商品ID: 商品_cnt = get_object_or_404(商品情報, pk=商品ID) else: 商品_cnt = 商品情報() form = 商品Form(request.POST, instance=商品_cnt) if form.is_valid(): 商品_cnt = form.save(commit=False) 商品_cnt.save() return redirect('emr:商品_list') else: form = 商品Form(instance=商品_cnt) return render(request,'emr/商品_edit.html', dict(form=form, 商品ID=商品ID))
【HTMLファイル名:商品_edit.html】 {% extends "emr/base.html" %} {% load bootstrap4 %} {% block title %}商品編集{% endblock title %} {% block content %} <h4 class="mt-4 mb-5 border-bottom">商品の編集</h4> {% if 商品ID %} <form action="{% url 'emr:商品_mod' 商品ID=商品ID %}" method="post"> {% else %} <form action="{% url 'emr:商品_add' %}" method="post"> {% endif %} {% csrf_token %} {% bootstrap_form form layout='horizontal' %} <div class="form-group row"> <div class="offset-md-3 col-md-9"> <button type="submit" class="btn btn-primary">送信</button> </div> </div> </form> <a href="{% url 'emr:商品_list' %}" class="btn btn-secondary btn-sm">戻る</a> {% endblock content %}

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問