質問編集履歴

4

2019/04/16 12:11

投稿

noname0001
noname0001

スコア16

test CHANGED
File without changes
test CHANGED
@@ -6,21 +6,21 @@
6
6
 
7
7
  ### [やりたいこと]
8
8
 
9
- IDで関連づいた2つのテーブルの内、片方を指定の条件でfilterし、それにより取得したIDでもう片方のテーブルをfilterします。
9
+ IDで関連づいた2つのDBテーブル(Reportテーブル、Datetimeテーブル)の内、片方を指定の条件でfilterし、それにより取得したIDでもう片方のDBテーブルの情報をfilterします。
10
-
10
+
11
- 画面にはそれぞれのテーブルから取得したデータの、対応する行を横並びに結合して表示したいです。
11
+ 画面にはそれぞれのDBテーブルから取得したデータの、対応する行を横並びに結合して表示したいです。
12
12
 
13
13
 
14
14
 
15
15
  ### [問題]
16
16
 
17
- 下記のように試しているのですが、chain()を使用すると(下記ではコメントアウトしています)両テーブルにそれぞれ同じIDが存在するため、IDのみ重複して2回ずつ同じものが表示されてしまいます。
17
+ 下記のように試しているのですが、chain()を使用すると(下記ではコメントアウトしています)両方のDBテーブルに同じID(application_id。Reportテーブルのprimary key、DatetimeテーブルのForeign key)が存在するため、IDのみ重複して2回ずつ同じものが表示されてしまいます。
18
18
 
19
19
 
20
20
 
21
21
  ### [試したこと]
22
22
 
23
- chain()を使用せずにtemplateでタグの構成を工夫して表示させようとしたのですが、下記のようにすると当然テーブルの全ての行にdatetime全てのが表示されてしまいます。
23
+ chain()を使用せずにtemplateでタグの構成を工夫して表示させようとしたのですが、下記のようにすると当然HTMLtableの全ての行にDatetimeテーブルから取得した全てのフィルドが表示されてしまいます。
24
24
 
25
25
  何か良い方法はありますか?
26
26
 
@@ -172,7 +172,7 @@
172
172
 
173
173
  ### [追記]
174
174
 
175
- 下記のように書き換えることで、ID重複表示がなくなりました。
175
+ 下記のように書き換えることで、HTMLのtableにID重複して表示されることがなくなりました。
176
176
 
177
177
  ```views
178
178
 
@@ -357,3 +357,15 @@
357
357
  ```
358
358
 
359
359
  どのように判定すれば良いでしょうか?
360
+
361
+
362
+
363
+ mtb_betaさん
364
+
365
+ ご指摘頂きありがとうございました。
366
+
367
+ 急いでいたため、テーブルの表現など曖昧になってしまいました。
368
+
369
+ Webアプリの開発に関しましては、分からない部分も多く、余計に分かり辛い文章となっていると思います。申し訳ありません。
370
+
371
+ models.pyはPCでの作業が可能になり次第記載します。

3

追記の編集

2019/04/16 12:11

投稿

noname0001
noname0001

スコア16

test CHANGED
File without changes
test CHANGED
@@ -316,9 +316,11 @@
316
316
 
317
317
  ```
318
318
 
319
- しかし、重複分の行は作成され、仮にデータが3行の場合、空の行が3行できてしまいます…
319
+ しかし、重複分の行は作成され、仮にデータが3行の場合、空の行が3行できてしまいます…
320
-
320
+
321
+  
322
+
321
- ```{% for q in queryset_chained %}```の下に、querysetがNoneでない場合のみ行を作るようにifで分岐するとよさそうですが、下記のようにしても結果は変わりませんでした。
323
+ {% for q in queryset_chained %}の下に、querysetがNoneでない場合のみ行を作るようにifで分岐するとよさそうですが、下記のようにしても結果は変わりませんでした。
322
324
 
323
325
  ```
324
326
 

2

追記の追加

2019/04/16 07:24

投稿

noname0001
noname0001

スコア16

test CHANGED
File without changes
test CHANGED
@@ -306,7 +306,7 @@
306
306
 
307
307
  {% endfor %}
308
308
 
309
- -->
309
+ -->
310
310
 
311
311
  </tbody>
312
312
 
@@ -317,3 +317,41 @@
317
317
  ```
318
318
 
319
319
  しかし、重複分の行は作成され、仮にデータが3行の場合、空の行が3行できてしまいます…。
320
+
321
+ ```{% for q in queryset_chained %}```の下に、querysetがNoneでない場合のみ行を作るようにifで分岐するとよさそうですが、下記のようにしても結果は変わりませんでした。
322
+
323
+ ```
324
+
325
+ {% for q in queryset_chained %}
326
+
327
+ {% if q != None %}
328
+
329
+ <tr>
330
+
331
+ <td>{{ q.datetime.application_id }}</td>
332
+
333
+ <td>{{ q.lunch_preparation_flag }}</td>
334
+
335
+ <td>{{ q.invoice_or_receipt }}</td>
336
+
337
+ <td>{{ q.total_price_of_lunch }}</td>
338
+
339
+ <td>{{ q.billing_state }}</td>
340
+
341
+ <td>{{ q.datetime.plan_start_datetime }}</td>
342
+
343
+ <td>{{ q.datetime.plan_end_datetime }}</td>
344
+
345
+ <td>{{ q.datetime.actual_start_datetime }}</td>
346
+
347
+ <td>{{ q.datetime.actual_end_datetime }}</td>
348
+
349
+ </tr>
350
+
351
+ {% endif%}
352
+
353
+ {% endfor %}
354
+
355
+ ```
356
+
357
+ どのように判定すれば良いでしょうか?

1

試したことを追加。

2019/04/16 07:23

投稿

noname0001
noname0001

スコア16

test CHANGED
File without changes
test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- ### [やったこと]
21
+ ### [試したこと]
22
22
 
23
23
  chain()を使用せずにtemplateでタグの構成を工夫して表示させようとしたのですが、下記のようにすると当然テーブルの全ての行にdatetimeの全てのデータが表示されてしまいます。
24
24
 
@@ -30,18 +30,24 @@
30
30
 
31
31
  ```views
32
32
 
33
+ ...
34
+
33
35
  queryset_report = Report.objects.filter(datetime__plan_start_datetime__range=(start_datetime, end_datetime))
34
36
 
35
37
  queryset_datetime = Datetime.objects.filter(application_id__in=queryset_report)
36
38
 
37
39
  # queryset_chained = chain(queryset_report, queryset_datetime)
38
40
 
41
+ ...
42
+
39
43
  ```
40
44
 
41
45
 
42
46
 
43
47
  ```views
44
48
 
49
+ ...
50
+
45
51
  context = {
46
52
 
47
53
  'search_keywords': search_keywords,
@@ -62,6 +68,8 @@
62
68
 
63
69
  }
64
70
 
71
+ ...
72
+
65
73
  ```
66
74
 
67
75
 
@@ -70,6 +78,8 @@
70
78
 
71
79
  ```template
72
80
 
81
+ ...
82
+
73
83
  <table>
74
84
 
75
85
  <thead>
@@ -154,4 +164,156 @@
154
164
 
155
165
  </table>
156
166
 
167
+ ...
168
+
157
- ```
169
+ ```
170
+
171
+
172
+
173
+ ### [追記]
174
+
175
+ 下記のように書き換えることで、IDの重複表示がなくなりました。
176
+
177
+ ```views
178
+
179
+ ...
180
+
181
+ queryset_report = Report.objects.filter(datetime__plan_start_datetime__range=(start_datetime, end_datetime))
182
+
183
+ queryset_datetime = Datetime.objects.filter(application_id__in=queryset_report)
184
+
185
+ queryset_chained = chain(queryset_report, queryset_datetime)
186
+
187
+ ...
188
+
189
+ ```
190
+
191
+
192
+
193
+ ```views
194
+
195
+ ...
196
+
197
+ context = {
198
+
199
+ 'search_keywords': search_keywords,
200
+
201
+ 'start_datetime': start_datetime,
202
+
203
+ 'end_datetime': end_datetime,
204
+
205
+ 'queryset_report': queryset_report,
206
+
207
+ 'queryset_datetime': queryset_datetime,
208
+
209
+ 'queryset_chained': queryset_chained,
210
+
211
+ 'verbose_name_list': verbose_name_list,
212
+
213
+ 'export_filepath': None,
214
+
215
+ }
216
+
217
+ ...
218
+
219
+ ```
220
+
221
+
222
+
223
+
224
+
225
+ ```template
226
+
227
+ ...
228
+
229
+ <table>
230
+
231
+ <thead>
232
+
233
+ <tr>
234
+
235
+ {% for verbose_name in verbose_name_list %}
236
+
237
+ <th>{{ verbose_name }}</th>
238
+
239
+ {% endfor %}
240
+
241
+ </tr>
242
+
243
+ </thead>
244
+
245
+ <tbody>
246
+
247
+
248
+
249
+ {% for q in queryset_chained %}
250
+
251
+ <tr>
252
+
253
+ <td>{{ q.datetime.application_id }}</td>
254
+
255
+ <td>{{ q.lunch_preparation_flag }}</td>
256
+
257
+ <td>{{ q.invoice_or_receipt }}</td>
258
+
259
+ <td>{{ q.total_price_of_lunch }}</td>
260
+
261
+ <td>{{ q.billing_state }}</td>
262
+
263
+ <td>{{ q.datetime.plan_start_datetime }}</td>
264
+
265
+ <td>{{ q.datetime.plan_end_datetime }}</td>
266
+
267
+ <td>{{ q.datetime.actual_start_datetime }}</td>
268
+
269
+ <td>{{ q.datetime.actual_end_datetime }}</td>
270
+
271
+ </tr>
272
+
273
+ {% endfor %}
274
+
275
+
276
+
277
+ <!--
278
+
279
+ {# {% for qr in queryset_report %} #}
280
+
281
+ <tr>
282
+
283
+ <td>{{ qr.application_id }}</td>
284
+
285
+ <td>{{ qr.lunch_preparation_flag }}</td>
286
+
287
+ <td>{{ qr.invoice_or_receipt }}</td>
288
+
289
+ <td>{{ qr.total_price_of_lunch }}</td>
290
+
291
+ <td>{{ qr.billing_state }}</td>
292
+
293
+ {% for qd in queryset_datetime %}
294
+
295
+ <td>{{ qd.plan_start_datetime }}</td>
296
+
297
+ <td>{{ qd.plan_end_datetime }}</td>
298
+
299
+ <td>{{ qd.actual_start_datetime }}</td>
300
+
301
+ <td>{{ qd.actual_end_datetime }}</td>
302
+
303
+ {# {% endfor %} #}
304
+
305
+ </tr>
306
+
307
+ {% endfor %}
308
+
309
+ -->
310
+
311
+ </tbody>
312
+
313
+ </table>
314
+
315
+ ...
316
+
317
+ ```
318
+
319
+ しかし、重複分の行は作成され、仮にデータが3行の場合、空の行が3行できてしまいます…。