teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

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

2020/05/07 10:28

投稿

gsachio
gsachio

スコア0

title CHANGED
@@ -1,1 +1,1 @@
1
- django 外部キー項目の選択リスト関する改善方法につ
1
+ django : 検索した結果(request.GET.get('query')をForm.py変数を引き渡した
body CHANGED
@@ -1,62 +1,132 @@
1
1
  ### 前提・実現したいこと
2
2
  djangoについての質問となります。
3
3
 
4
+ ※Viewを関数からClassに変更したため、内容を全体的に更新いたしました。
5
+
6
+ 【処理の流れ】
7
+ ①VIEWのclass 商品Editは、商品編集(追加や変更)をするページとなります。
8
+ ②現在、商品編集ページでの追加や変更処理は正常に動作しております。
4
- 商品情報テブルからメーカー情報テーブルに外部キーによる接続しています。
9
+ ③今回、商品編集ペジでは、メーカーNO検索するための入力項目があります。
10
+ ④検索項目にメーカーNOを入力して検索ボタンをおすと、メーカーNO_ARの絞り込みをしてSELECTフォームを対象の1件だけをリスト表示する。
11
+
12
+
13
+ 現在、上記④がうまく処理できない状況となっております。
5
- 商品編集ページからメーカー名追加するときにカー名を選択リスト(自動で作らてい)から選択のですが、もし、メーカー名を1000件登録した場合には1000件のリストから探なくはいけない状況となっていす。
14
+ get_form_kwargs使用してSELECTフォムのリストに表示されるメーカ名を1件にいのですが、現在は登録されているメーカー名がすべてSELECTフォームのリストに表示しまっている状態です。
6
-
7
- この場合、メーカー名を絞り込んだり、もしくは、メーカー名やメーカーNOの箇所を入力するように変更できるのでしょうか?
15
+
8
16
  いろいろ試したのですが、なにをやってもうまくいかないため、もし良い解決策があればご教授をお願いします。
17
+
18
+
19
+
20
+
9
21
  ### 該当のソースコード
10
22
 
11
23
  ```
12
-
13
24
  【モデルファイル名:models.py】
14
25
  class メーカー情報(models.Model):
15
-
26
+
16
27
  メーカーNO = models.CharField('メーカーNO', max_length=10, primary_key=True)
17
28
  メーカー名 = models.CharField('メーカー名', max_length=255)
18
-
29
+
19
30
  def __str__(self):
20
31
  return self.メーカー名
21
-
32
+
33
+
22
34
  class 商品情報(models.Model):
23
-
35
+
24
36
  商品ID = models.AutoField(primary_key=True)
25
-  商品名 = models.CharField('商品名', max_length=255)
37
+ 商品名 = models.CharField('商品名', max_length=255)
26
38
  メーカーNO_AR = models.ForeignKey('メーカー情報', related_name='メーカーNO_AR', verbose_name='メーカー名', to_field='メーカーNO', on_delete=models.PROTECT)
39
+
27
-
40
+ ```
41
+
42
+
28
-
43
+ ```
29
44
  【フォームファイル名:forms.py】
45
+ from django.forms import ModelForm
46
+ from django import forms
47
+ from django.utils import timezone
48
+ from emr.models import *
49
+
50
+ class メーカーForm(ModelForm):
51
+ class Meta:
52
+ model = メーカー情報
53
+ fields = ('メーカーNO', 'メーカー名', '登録者')
54
+
55
+
30
56
  class 商品Form(ModelForm):
31
-
57
+
32
58
  class Meta:
33
59
  model = 商品情報
34
60
  fields = ('商品ID', ’商品名’, 'メーカーNO_AR')
61
+
35
-
62
+ def __init__(self, *args, **kwargs):
36
-
63
+ id = kwargs.pop('q_word')
64
+ super(商品Form,self).__init__(*args, **kwargs)
65
+ self.fields['メーカーNO_AR'].queryset = メーカー情報.objects.filter(メーカーNO=id)
66
+ ```
67
+
68
+
69
+
70
+ ```
37
71
  【ビューファイル名:views.py】
72
+ from django.shortcuts import render, get_object_or_404, redirect
73
+ from django.http import HttpResponse
74
+ from django.contrib.auth.decorators import login_required
75
+ from emr.models import メーカー情報, 商品情報
76
+ from emr.forms import メーカーForm,商品Form
77
+ from django.db.models import Q
78
+ from django.views.generic.edit import FormView
79
+ from django.views import generic
80
+
81
+
82
+ class 商品Edit(generic.TemplateView, FormView):
83
+
84
+
85
+ form_class = 商品Form()
86
+
87
+ def __init__(self):
88
+ self.params = {
89
+ 'form':商品Form()
90
+ }
91
+
92
+
93
+ def get_form_kwargs(self):
94
+ q_word = request.GET.get('query')
95
+ kwargs = super(商品Edit,self).get_form_kwargs()
96
+ kawrgs.update({'q_word': q_word})
38
- @login_required
97
+ return kwargs
98
+
99
+
39
- def comm_edit(request, 商品ID=None):
100
+ def get(self, request, 商品ID=None, メーカーNO_AR=None, *args, **kwargs):
40
- if 商品ID:
101
+ if 商品ID:
41
- comm_cnt = get_object_or_404(商品情報, pk=商品ID)
102
+ 商品_cnt = get_object_or_404(商品情報, pk=商品ID)
42
- else:
103
+ else:
43
- comm_cnt = 商品情報()
104
+ 商品_cnt = 商品情報()
105
+
44
-
106
+ form = 商品Form(instance=商品_cnt)
107
+ return render(request,'emr/商品_edit.html', dict(form=form, 商品ID=商品ID))
108
+
109
+
110
+ def post(self, request, 商品ID=None, メーカーNO_AR=None, *args, **kwargs):
111
+ if 商品ID:
45
- if request.method == 'POST':
112
+ 商品_cnt = get_object_or_404(商品情報, pk=商品ID)
113
+ else:
114
+ 商品_cnt = 商品情報()
115
+
46
- form = 商品Form(request.POST, instance=comm_cnt)
116
+ form = 商品Form(request.POST, instance=商品_cnt)
47
117
  if form.is_valid():
48
- comm_cnt = form.save(commit=False)
118
+ 商品_cnt = form.save(commit=False)
49
- comm_cnt.save()
119
+ 商品_cnt.save()
50
- return redirect('emr:comm_list')
120
+ return redirect('emr:商品_list')
121
+
51
- else:
122
+ else:
52
- form = 商品Form(instance=comm_cnt)
123
+ form = 商品Form(instance=商品_cnt)
53
-
124
+
54
- return render(request, 'emr/comm_edit.html', dict(form=form, 商品ID=商品ID)
125
+ return render(request,'emr/商品_edit.html', dict(form=form, 商品ID=商品ID))
55
-
126
+ ```
127
+
56
-
128
+ ```
57
-
58
-
59
- 【HTMLファイル名:comm_edit.html】
129
+ 【HTMLファイル名:商品_edit.html】
60
130
  {% extends "emr/base.html" %}
61
131
 
62
132
  {% load bootstrap4 %}
@@ -67,9 +137,9 @@
67
137
  <h4 class="mt-4 mb-5 border-bottom">商品の編集</h4>
68
138
 
69
139
  {% if 商品ID %}
70
- <form action="{% url 'emr:comm_mod' 商品ID=商品ID %}" method="post">
140
+ <form action="{% url 'emr:商品_mod' 商品ID=商品ID %}" method="post">
71
141
  {% else %}
72
- <form action="{% url 'emr:comm_add' %}" method="post">
142
+ <form action="{% url 'emr:商品_add' %}" method="post">
73
143
  {% endif %}
74
144
  {% csrf_token %}
75
145
  {% bootstrap_form form layout='horizontal' %}
@@ -80,6 +150,6 @@
80
150
  </div>
81
151
  </div>
82
152
  </form>
83
- <a href="{% url 'emr:comm_list' %}" class="btn btn-secondary btn-sm">戻る</a>
153
+ <a href="{% url 'emr:商品_list' %}" class="btn btn-secondary btn-sm">戻る</a>
84
154
  {% endblock content %}
85
155
  ```

1

タイトル修正

2020/05/07 10:28

投稿

gsachio
gsachio

スコア0

title CHANGED
@@ -1,1 +1,1 @@
1
- django 外部キーがされた項目の選択リスト改善方法について
1
+ django 外部キー項目の選択リストに関する改善方法について
body CHANGED
File without changes