質問編集履歴

2

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

2020/05/07 10:28

投稿

gsachio
gsachio

スコア0

test CHANGED
@@ -1 +1 @@
1
- django 外部キー項目の選択リスト関する改善方法につ
1
+ django : 検索した結果(request.GET.get('query')をForm.py変数を引き渡した
test CHANGED
@@ -4,61 +4,113 @@
4
4
 
5
5
 
6
6
 
7
+ ※Viewを関数からClassに変更したため、内容を全体的に更新いたしました。
8
+
9
+
10
+
11
+ 【処理の流れ】
12
+
13
+ ①VIEWのclass 商品Editは、商品編集(追加や変更)をするページとなります。
14
+
15
+ ②現在、商品編集ページでの追加や変更処理は正常に動作しております。
16
+
7
- 商品情報テブルからメーカー情報テーブルに外部キーによ接続をしています。
17
+ ③今回、商品編集ペジでは、メーカーNOを検索すための入力項目があります。
18
+
8
-
19
+ ④検索項目にメーカーNOを入力して検索ボタンをおすと、メーカーNO_ARの絞り込みをしてSELECTフォームを対象の1件だけをリスト表示する。
20
+
21
+
22
+
23
+
24
+
25
+ 現在、上記④がうまく処理できない状況となっております。
26
+
9
- 商品編集ページからメーカー名追加するときにカー名を選択リスト(自動で作らてい)から選択のですが、もし、メーカー名を1000件登録した場合には1000件のリストから探なくはいけない状況となっていす。
27
+ get_form_kwargs使用してSELECTフォムのリストに表示されるメーカ名を1件にいのですが、現在は登録されているメーカー名がすべてSELECTフォームのリストに表示しまっている状態です。
10
-
11
-
12
-
13
- この場合、メーカー名を絞り込んだり、もしくは、メーカー名やメーカーNOの箇所を入力するように変更できるのでしょうか?
28
+
29
+
14
30
 
15
31
  いろいろ試したのですが、なにをやってもうまくいかないため、もし良い解決策があればご教授をお願いします。
16
32
 
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
17
41
  ### 該当のソースコード
18
42
 
19
43
 
20
44
 
21
45
  ```
22
46
 
23
-
24
-
25
47
  【モデルファイル名:models.py】
26
48
 
27
49
  class メーカー情報(models.Model):
28
50
 
29
-
51
+
30
52
 
31
53
  メーカーNO = models.CharField('メーカーNO', max_length=10, primary_key=True)
32
54
 
33
55
  メーカー名 = models.CharField('メーカー名', max_length=255)
34
56
 
35
-
57
+
36
58
 
37
59
  def __str__(self):
38
60
 
39
61
  return self.メーカー名
40
62
 
41
-
63
+
64
+
65
+
42
66
 
43
67
  class 商品情報(models.Model):
44
68
 
45
-
69
+
46
70
 
47
71
  商品ID = models.AutoField(primary_key=True)
48
72
 
49
-  商品名 = models.CharField('商品名', max_length=255)
73
+ 商品名 = models.CharField('商品名', max_length=255)
50
74
 
51
75
  メーカーNO_AR = models.ForeignKey('メーカー情報', related_name='メーカーNO_AR', verbose_name='メーカー名', to_field='メーカーNO', on_delete=models.PROTECT)
52
76
 
77
+
78
+
53
-
79
+ ```
80
+
81
+
82
+
83
+
84
+
54
-
85
+ ```
55
-
56
86
 
57
87
  【フォームファイル名:forms.py】
58
88
 
89
+ from django.forms import ModelForm
90
+
91
+ from django import forms
92
+
93
+ from django.utils import timezone
94
+
95
+ from emr.models import *
96
+
97
+
98
+
99
+ class メーカーForm(ModelForm):
100
+
101
+ class Meta:
102
+
103
+ model = メーカー情報
104
+
105
+ fields = ('メーカーNO', 'メーカー名', '登録者')
106
+
107
+
108
+
109
+
110
+
59
111
  class 商品Form(ModelForm):
60
112
 
61
-
113
+
62
114
 
63
115
  class Meta:
64
116
 
@@ -66,55 +118,143 @@
66
118
 
67
119
  fields = ('商品ID', ’商品名’, 'メーカーNO_AR')
68
120
 
121
+
122
+
69
-
123
+ def __init__(self, *args, **kwargs):
124
+
70
-
125
+ id = kwargs.pop('q_word')
126
+
71
-
127
+ super(商品Form,self).__init__(*args, **kwargs)
128
+
129
+ self.fields['メーカーNO_AR'].queryset = メーカー情報.objects.filter(メーカーNO=id)
130
+
131
+ ```
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+ ```
72
140
 
73
141
  【ビューファイル名:views.py】
74
142
 
143
+ from django.shortcuts import render, get_object_or_404, redirect
144
+
145
+ from django.http import HttpResponse
146
+
147
+ from django.contrib.auth.decorators import login_required
148
+
149
+ from emr.models import メーカー情報, 商品情報
150
+
151
+ from emr.forms import メーカーForm,商品Form
152
+
153
+ from django.db.models import Q
154
+
155
+ from django.views.generic.edit import FormView
156
+
157
+ from django.views import generic
158
+
159
+
160
+
161
+
162
+
163
+ class 商品Edit(generic.TemplateView, FormView):
164
+
165
+
166
+
167
+
168
+
169
+ form_class = 商品Form()
170
+
171
+
172
+
173
+ def __init__(self):
174
+
175
+ self.params = {
176
+
177
+ 'form':商品Form()
178
+
179
+ }
180
+
181
+
182
+
183
+
184
+
185
+ def get_form_kwargs(self):
186
+
187
+ q_word = request.GET.get('query')
188
+
189
+ kwargs = super(商品Edit,self).get_form_kwargs()
190
+
191
+ kawrgs.update({'q_word': q_word})
192
+
75
- @login_required
193
+ return kwargs
76
-
194
+
195
+
196
+
197
+
198
+
77
- def comm_edit(request, 商品ID=None):
199
+ def get(self, request, 商品ID=None, メーカーNO_AR=None, *args, **kwargs):
78
-
200
+
79
- if 商品ID:
201
+ if 商品ID:
80
-
202
+
81
- comm_cnt = get_object_or_404(商品情報, pk=商品ID)
203
+ 商品_cnt = get_object_or_404(商品情報, pk=商品ID)
82
-
204
+
83
- else:
205
+ else:
84
-
206
+
85
- comm_cnt = 商品情報()
207
+ 商品_cnt = 商品情報()
208
+
209
+
210
+
86
-
211
+ form = 商品Form(instance=商品_cnt)
212
+
87
-
213
+ return render(request,'emr/商品_edit.html', dict(form=form, 商品ID=商品ID))
214
+
215
+
216
+
217
+
218
+
88
-
219
+ def post(self, request, 商品ID=None, メーカーNO_AR=None, *args, **kwargs):
220
+
221
+ if 商品ID:
222
+
89
- if request.method == 'POST':
223
+ 商品_cnt = get_object_or_404(商品情報, pk=商品ID)
224
+
90
-
225
+ else:
226
+
227
+ 商品_cnt = 商品情報()
228
+
229
+
230
+
91
- form = 商品Form(request.POST, instance=comm_cnt)
231
+ form = 商品Form(request.POST, instance=商品_cnt)
92
232
 
93
233
  if form.is_valid():
94
234
 
95
- comm_cnt = form.save(commit=False)
235
+ 商品_cnt = form.save(commit=False)
96
-
236
+
97
- comm_cnt.save()
237
+ 商品_cnt.save()
98
-
238
+
99
- return redirect('emr:comm_list')
239
+ return redirect('emr:商品_list')
100
-
240
+
241
+
242
+
101
- else:
243
+ else:
102
-
244
+
103
- form = 商品Form(instance=comm_cnt)
245
+ form = 商品Form(instance=商品_cnt)
104
-
105
-
106
-
246
+
247
+
248
+
107
- return render(request, 'emr/comm_edit.html', dict(form=form, 商品ID=商品ID)
249
+ return render(request,'emr/商品_edit.html', dict(form=form, 商品ID=商品ID))
250
+
108
-
251
+ ```
252
+
253
+
254
+
109
-
255
+ ```
110
-
111
-
112
-
113
-
114
-
115
-
116
-
256
+
117
- 【HTMLファイル名:comm_edit.html】
257
+ 【HTMLファイル名:商品_edit.html】
118
258
 
119
259
  {% extends "emr/base.html" %}
120
260
 
@@ -136,11 +276,11 @@
136
276
 
137
277
  {% if 商品ID %}
138
278
 
139
- <form action="{% url 'emr:comm_mod' 商品ID=商品ID %}" method="post">
279
+ <form action="{% url 'emr:商品_mod' 商品ID=商品ID %}" method="post">
140
280
 
141
281
  {% else %}
142
282
 
143
- <form action="{% url 'emr:comm_add' %}" method="post">
283
+ <form action="{% url 'emr:商品_add' %}" method="post">
144
284
 
145
285
  {% endif %}
146
286
 
@@ -162,7 +302,7 @@
162
302
 
163
303
  </form>
164
304
 
165
- <a href="{% url 'emr:comm_list' %}" class="btn btn-secondary btn-sm">戻る</a>
305
+ <a href="{% url 'emr:商品_list' %}" class="btn btn-secondary btn-sm">戻る</a>
166
306
 
167
307
  {% endblock content %}
168
308
 

1

タイトル修正

2020/05/07 10:28

投稿

gsachio
gsachio

スコア0

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