質問編集履歴

8

バージョン情報の追加

2021/03/16 13:35

投稿

tomtakeru
tomtakeru

スコア4

test CHANGED
File without changes
test CHANGED
@@ -684,6 +684,8 @@
684
684
 
685
685
  ### バージョン
686
686
 
687
+ - Python 3.7
688
+
687
689
  - Django 2.2.5
688
690
 
689
- - Python 3.7
691
+ - python-dotenv 0.15.0

7

表示の細かい変更

2021/03/16 13:35

投稿

tomtakeru
tomtakeru

スコア4

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- データベースのMemoテーブル(「プロジェクト構成・ファイル」のmodels.py参照)の一覧表示,タプルの新規作成ができるサイトを実装しました.そのテーブルの属性の1つにManyToManyFieldでTagテーブルを実装しました.以下のふたつの疑問を解消したいです.
1
+ データベースのMemoテーブル(「プロジェクト構成・ファイル」のmodels.py参照)の一覧表示,タプルの新規作成ができるwebアプリケーションを実装しました.そしてそのテーブルの属性の1つに,ManyToManyFieldでTagテーブルを指定し,実装しました.以下のふたつの疑問を解消したいです.
2
2
 
3
3
 
4
4
 

6

表示の細かい変更

2021/03/14 09:19

投稿

tomtakeru
tomtakeru

スコア4

test CHANGED
File without changes
test CHANGED
@@ -1,16 +1,12 @@
1
- データベースのMemoテーブル(「プロジェクト構成・ファイル」のmodels.py参照)の一覧表示,タプルの新規作成ができるサイトを実装しました.そのテーブルの属性の1つにManyToManyFieldでTagテーブルを実装したのですが,
1
+ データベースのMemoテーブル(「プロジェクト構成・ファイル」のmodels.py参照)の一覧表示,タプルの新規作成ができるサイトを実装しました.そのテーブルの属性の1つにManyToManyFieldでTagテーブルを実装しまし.以下ふたつの疑問を解消したいです.
2
-
3
-
4
-
2
+
3
+
4
+
5
- (疑問①)Memoテーブルの一覧表示にそれぞれのタグを表示するにはどのように記述すれば良いでしょうか.
5
+ (疑問①)Memoテーブルの一覧表示にそれぞれのタグを表示するにはどのように実装すれば良いか.
6
-
7
-
8
-
9
- また,
6
+
10
-
11
-
12
-
7
+
8
+
13
- (疑問②)modelをMemoテーブルに指定したMemoCreateViewで,Tagテーブルのタプルを新規作成したい場合の実装方法がわりません.MemoCreateViewで実装でないのでしょう.
9
+ (疑問②)Memoテーブルに指定したMemoCreateViewで,Tagテーブルのタプルを新規作成するフォームをどように実装すれば良いか.(MemoCreateViewで実装は一般的ないのか)
14
10
 
15
11
 
16
12
 

5

表示の細かい変更

2021/03/14 09:16

投稿

tomtakeru
tomtakeru

スコア4

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- (疑問②)modelをMemoテーブルに指定したMemoCreateViewで,タグテーブルのタプルを新規作成したい場合の実装方法がわかりません.MemoCreateViewでは実装できないのでしょうか.
13
+ (疑問②)modelをMemoテーブルに指定したMemoCreateViewで,Tagテーブルのタプルを新規作成したい場合の実装方法がわかりません.MemoCreateViewでは実装できないのでしょうか.
14
14
 
15
15
 
16
16
 

4

表示の細かい変更

2021/03/14 09:00

投稿

tomtakeru
tomtakeru

スコア4

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- (疑問②)modelをMemoテーブルに指定しform_classもMemoテーブルを元にしたModelFormを指定したMemoCreateViewで,タグテーブルのタプルを新規作成したい場合の実装方法がわかりません.MemoCreateViewでは実装できないのでしょうか.
13
+ (疑問②)modelをMemoテーブルに指定したMemoCreateViewで,タグテーブルのタプルを新規作成したい場合の実装方法がわかりません.MemoCreateViewでは実装できないのでしょうか.
14
14
 
15
15
 
16
16
 

3

表示の細かい変更

2021/03/14 08:59

投稿

tomtakeru
tomtakeru

スコア4

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- ①Memoテーブルの一覧表示にそれぞれのタグを表示するにはどのように記述すれば良いでしょうか.
5
+ (疑問)Memoテーブルの一覧表示にそれぞれのタグを表示するにはどのように記述すれば良いでしょうか.
6
6
 
7
7
 
8
8
 
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- ②modelをMemoテーブルに指定しform_classもMemoテーブルを元にしたModelFormを指定したMemoCreateViewで,タグテーブルのタプルを新規作成したい場合の実装方法がわかりません.MemoCreateViewでは実装できないのでしょうか.
13
+ (疑問)modelをMemoテーブルに指定しform_classもMemoテーブルを元にしたModelFormを指定したMemoCreateViewで,タグテーブルのタプルを新規作成したい場合の実装方法がわかりません.MemoCreateViewでは実装できないのでしょうか.
14
14
 
15
15
 
16
16
 
@@ -86,7 +86,7 @@
86
86
 
87
87
  ```python
88
88
 
89
- # models.py
89
+ # memo/models.py
90
90
 
91
91
 
92
92
 
@@ -162,7 +162,7 @@
162
162
 
163
163
  ```python
164
164
 
165
- # urls.py
165
+ # memo/urls.py
166
166
 
167
167
 
168
168
 
@@ -190,21 +190,285 @@
190
190
 
191
191
  ```python
192
192
 
193
+ # memo/views.py
194
+
195
+
196
+
197
+ from django.views.generic import ListView
198
+
199
+ from django.views.generic import CreateView
200
+
201
+ from django.urls import reverse_lazy
202
+
203
+
204
+
205
+ from .models import Memo
206
+
207
+ from .forms import MemoCreateForm
208
+
209
+
210
+
211
+ class MemoListView(ListView):
212
+
213
+ model = Memo
214
+
215
+ template_name = 'memo_list.html'
216
+
217
+
218
+
219
+ def get_queryset(self):
220
+
221
+ memo_list = Memo.objects.all().order_by('-created_at')
222
+
223
+ return memo_list
224
+
225
+
226
+
227
+ class MemoCreateView(CreateView):
228
+
229
+ model = Memo
230
+
231
+ template_name = 'memo_create.html'
232
+
233
+ form_class = MemoCreateForm
234
+
235
+ success_url = reverse_lazy('memo:memo_list')
236
+
237
+
238
+
239
+ ```
240
+
241
+
242
+
243
+ ```python
244
+
245
+ # memo/forms.py
246
+
247
+
248
+
249
+ from django.forms import ModelForm
250
+
251
+ from .models import Memo
252
+
253
+
254
+
255
+ class MemoCreateForm(ModelForm):
256
+
257
+ class Meta:
258
+
259
+ model = Memo
260
+
261
+ fields = ('title', 'content', 'tags')
262
+
263
+
264
+
265
+ ```
266
+
267
+
268
+
269
+ ```html
270
+
271
+ <!-- memo/templates/memo_list.html -->
272
+
273
+
274
+
275
+ <!DOCTYPE html>
276
+
277
+ <html lang="ja">
278
+
279
+ <head>
280
+
281
+ <meta charset="UTF-8">
282
+
283
+ <title>Memo List</title>
284
+
285
+ </head>
286
+
287
+ <body>
288
+
289
+ <a href="{% url 'memo:memo_create' %}">新規メモ作成</a>
290
+
291
+ <table border="2">
292
+
293
+ <thead>
294
+
295
+ <tr>
296
+
297
+ <th>タイトル</th>
298
+
299
+ <th>内容</th>
300
+
301
+ <th>タグ</th>
302
+
303
+ </tr>
304
+
305
+ </thead>
306
+
307
+ <tbody>
308
+
309
+ {% for memo in memo_list %}
310
+
311
+ <tr>
312
+
313
+ <td>{{ memo.title }}</td><td>{{ memo.content }}</td><td>{{ memo.tags }}</td>
314
+
315
+ <!-- 上記だとmemo.tagsはmemo.Tag.Noneと表示されてしまいます. -->
316
+
317
+ </tr>
318
+
319
+ {% endfor %}
320
+
321
+ </tbody>
322
+
323
+ </table>
324
+
325
+ </body>
326
+
327
+ </html>
328
+
329
+
330
+
331
+ ```
332
+
333
+
334
+
335
+ ```html
336
+
337
+ <!-- memo/templates/memo_create.html -->
338
+
339
+
340
+
341
+ <!DOCTYPE html>
342
+
343
+ <html lang="ja">
344
+
345
+ <head>
346
+
347
+ <meta charset="UTF-8">
348
+
349
+ <title>Memo Create</title>
350
+
351
+ </head>
352
+
353
+ <body>
354
+
355
+ <form method="post">
356
+
357
+ <table>
358
+
359
+ {% csrf_token %}
360
+
361
+ {{ form.as_table }}
362
+
363
+ </table>
364
+
365
+ <button type="submit">作成</button>
366
+
367
+ </form>
368
+
369
+ </body>
370
+
371
+ </html>
372
+
373
+
374
+
375
+ ```
376
+
377
+
378
+
379
+ ## 疑問①に関した試したこと
380
+
381
+ - memo.tagsをforタグでまわす
382
+
383
+
384
+
385
+ memo_list.htmlのなかでmemo.tagsをforタグでまわそうとしたところ,ブラウサにDjangoのエラーが出力されてしまいました.エラーによると「memo.tagsはManyRelatedMnager objectであり,iterableではない」とのことなのですが,ManyRelatedManagerとはなんなのでしょうか.
386
+
387
+
388
+
389
+ ```html
390
+
391
+ # memo_list.html
392
+
393
+
394
+
395
+ <!-- 略 -->
396
+
397
+
398
+
399
+ <tbody>
400
+
401
+ {% for memo in memo_list %}
402
+
403
+ <tr>
404
+
405
+ <td>{{ memo.title }}</td><td>{{ memo.content }}</td>
406
+
407
+ <td>
408
+
409
+ {% for tag in memo.tags %}
410
+
411
+ {{ tag.name }}
412
+
413
+ {% endfor %}
414
+
415
+ </td>
416
+
417
+ </tr>
418
+
419
+ {% endfor %}
420
+
421
+ </tbody>
422
+
423
+
424
+
425
+ <!-- 略 -->
426
+
427
+
428
+
429
+ ```
430
+
431
+
432
+
433
+ ```browser
434
+
435
+ # エラー
436
+
437
+ TypeError at /
438
+
439
+ 'ManyRelatedManager' object is not iterable
440
+
441
+
442
+
443
+ Request Method: GET
444
+
445
+ Request URL: http://127.0.0.1:8000/
446
+
447
+ Django Version: 2.2.5
448
+
449
+ Exception Type: TypeError
450
+
451
+ Exception Value: 'ManyRelatedManager' object is not iterable
452
+
453
+ ```
454
+
455
+
456
+
457
+ - get_querysetメソッドでタグをわたす
458
+
459
+
460
+
461
+ MemoListViewクラスのget_querysetメソッドの中でmemoオブジェクトにmemo.tag_listという属性を追加したところ,表示できました.この実装は最も良い方法なのでしょうか.また,select_relatedメソッドはDBの読み込み回数を省略できるとのことだったので,後ろに付けたのですが,使い方は正しいのでしょうか.
462
+
463
+
464
+
465
+ ```python
466
+
193
467
  # views.py
194
468
 
195
469
 
196
470
 
197
- from django.views.generic import ListView
198
-
199
- from django.views.generic import CreateView
200
-
201
- from django.urls import reverse_lazy
202
-
203
-
204
-
205
- from .models import Memo
471
+ #
206
-
207
- from .forms import MemoCreateForm
208
472
 
209
473
 
210
474
 
@@ -220,45 +484,121 @@
220
484
 
221
485
  memo_list = Memo.objects.all().order_by('-created_at')
222
486
 
487
+ for memo in memo_list:
488
+
489
+ memo.tag_list = memo.tags.all().select_related()
490
+
223
491
  return memo_list
224
492
 
225
493
 
226
494
 
227
- class MemoCreateView(CreateView):
228
-
229
- model = Memo
230
-
231
- template_name = 'memo_create.html'
232
-
233
- form_class = MemoCreateForm
234
-
235
- success_url = reverse_lazy('memo:memo_list')
236
-
237
-
238
-
239
- ```
495
+ #
496
+
497
+
498
+
499
+ ```
500
+
501
+
502
+
503
+ ```html
504
+
505
+ # memo_list.html
506
+
507
+
508
+
509
+ <!-- 略 -->
510
+
511
+
512
+
513
+ <tbody>
514
+
515
+ {% for memo in memo_list %}
516
+
517
+ <tr>
518
+
519
+ <td>{{ memo.title }}</td><td>{{ memo.content }}</td>
520
+
521
+ <td>
522
+
523
+ {% for tag in memo.tag_list %}
524
+
525
+ 「{{ tag.name }}」
526
+
527
+ {% endfor %}
528
+
529
+ </td>
530
+
531
+ </tr>
532
+
533
+ {% endfor %}
534
+
535
+ </tbody>
536
+
537
+
538
+
539
+ <!-- 略 -->
540
+
541
+
542
+
543
+ ```
544
+
545
+
546
+
547
+
548
+
549
+ ## 疑問②に関して試したこと
550
+
551
+
552
+
553
+ django.views.generic.CreateViewを継承したViewClassでのタグの新規作成フォームの作成方法はわかりませんでした.django.views.generic.Viewを継承したクラスを用いて,自分でformをテンプレートに記述してみましたが,Memoテーブルのタプルの新規作成用のformタグの中で,Tagテーブルのタプルの新規作成用のフォームタグを実装する方法がわかりませんでした.調べたところformタグのネストはできないようです.このような状況の場合の良い実装方法を教えてください.別々に記述するしかないのでしょうか.
240
554
 
241
555
 
242
556
 
243
557
  ```python
244
558
 
245
- # forms.py
559
+ # views.py
246
-
247
-
248
-
249
- from django.forms import ModelForm
560
+
250
-
561
+
562
+
251
- from .models import Memo
563
+ #
252
-
253
-
254
-
564
+
565
+
566
+
255
- class MemoCreateForm(ModelForm):
567
+ class MemoCreateView(View):
568
+
569
+
570
+
256
-
571
+ def get(self, request, *args, **kwargs):
572
+
257
- class Meta:
573
+ tag_list = Tag.objects.all()
258
-
574
+
259
- model = Memo
575
+ context = {
576
+
260
-
577
+ 'tag_list': tag_list,
578
+
579
+ }
580
+
581
+ return render(request, 'memo_create.html', context)
582
+
583
+
584
+
585
+ def post(self, request, *args, **kwargs):
586
+
587
+ if request.POST["title"] != "":
588
+
261
- fields = ('title', 'content', 'tags')
589
+ memo = Memo(title=request.POST['title'], content=request.POST['content'])
590
+
591
+ memo.save()
592
+
593
+ for tag in request.POST.getlist('tags'):
594
+
595
+ memo.tags.add(tag)
596
+
597
+ return redirect(reverse('memo:memo_list'))
598
+
599
+
600
+
601
+ # 略
262
602
 
263
603
 
264
604
 
@@ -268,9 +608,7 @@
268
608
 
269
609
  ```html
270
610
 
271
- <!-- memo_list.html -->
611
+ <!-- memo_create.html -->
272
-
273
-
274
612
 
275
613
  <!DOCTYPE html>
276
614
 
@@ -280,47 +618,63 @@
280
618
 
281
619
  <meta charset="UTF-8">
282
620
 
283
- <title>Memo List</title>
621
+ <title>Memo Create</title>
284
622
 
285
623
  </head>
286
624
 
287
625
  <body>
288
626
 
289
- <a href="{% url 'memo:memo_create' %}">新規メモ作成</a>
627
+ <form method="post" action="{% url 'memo:memo_create' %}">
290
-
291
- <table border="2">
628
+
292
-
293
- <thead>
629
+ <table>
630
+
294
-
631
+ {% csrf_token %}
632
+
633
+ <input type="hidden" name="csrfmiddlewaretoken"
634
+
635
+ value="U2W58fChfSjAmFz1J55beZXviW7AOi0tyRD52QHxst7MpfCrRfhRoVnss8mWsVZH" kl_vkbd_parsed="true">
636
+
637
+ <tbody>
638
+
295
- <tr>
639
+ <tr>
296
-
640
+
297
- <th>タイトル</th>
641
+ <th><label for="title">タイトル:</label></th>
298
-
642
+
299
- <th>内容</th>
643
+ <td><input type="text" name="title" maxlength="255" required="" id="title" kl_vkbd_parsed="true"></td>
300
-
301
- <th>タグ</th>
644
+
302
-
303
- </tr>
645
+ </tr>
304
-
305
- </thead>
646
+
306
-
307
- <tbody>
308
-
309
- {% for memo in memo_list %}
310
-
311
- <tr>
647
+ <tr>
648
+
312
-
649
+ <th><label for="content">本文:</label></th>
650
+
313
- <td>{{ memo.title }}</td><td>{{ memo.content }}</td><td>{{ memo.tags }}</td>
651
+ <td><textarea name="content" cols="40" rows="10" id="content"></textarea></td>
314
-
315
- <!-- 上記だとmemo.tagsはmemo.Tag.Noneと表示されてしまいます. -->
652
+
316
-
317
- </tr>
653
+ </tr>
654
+
318
-
655
+ <tr>
656
+
657
+ <th><label for="tags">タグ:</label></th>
658
+
659
+ <td><select name="tags" multiple>
660
+
661
+ {% for tag in tag_list %}
662
+
663
+ <option value="{{ tag.pk }}">{{ tag.name }}</option>
664
+
319
- {% endfor %}
665
+ {% endfor %}
666
+
320
-
667
+ </select></td>
668
+
669
+ </tr>
670
+
321
- </tbody>
671
+ </tbody>
322
-
672
+
323
- </table>
673
+ </table>
674
+
675
+ <button type="submit">作成</button>
676
+
677
+ </form>
324
678
 
325
679
  </body>
326
680
 
@@ -332,361 +686,7 @@
332
686
 
333
687
 
334
688
 
335
- ```html
336
-
337
- <!-- memo_create.html -->
338
-
339
-
340
-
341
- <!DOCTYPE html>
342
-
343
- <html lang="ja">
344
-
345
- <head>
346
-
347
- <meta charset="UTF-8">
348
-
349
- <title>Memo Create</title>
350
-
351
- </head>
352
-
353
- <body>
354
-
355
- <form method="post">
356
-
357
- <table>
358
-
359
- {% csrf_token %}
360
-
361
- {{ form.as_table }}
362
-
363
- </table>
364
-
365
- <button type="submit">作成</button>
366
-
367
- </form>
368
-
369
- </body>
370
-
371
- </html>
372
-
373
-
374
-
375
- ```
376
-
377
-
378
-
379
- # 疑問①に関した試したこと
380
-
381
- - memo.tagsをforタグでまわす
382
-
383
-
384
-
385
- memo_list.htmlのなかでmemo.tagsをforタグでまわそうとしたところ,ブラウサにDjangoのエラーが出力されてしまいました.エラーによると「memo.tagsはManyRelatedMnager objectであり,iterableではない」とのことなのですが,ManyRelatedManagerとはなんなのでしょうか.
386
-
387
-
388
-
389
- ```html
390
-
391
- # memo_list.html
392
-
393
-
394
-
395
- <!-- 略 -->
396
-
397
-
398
-
399
- <tbody>
400
-
401
- {% for memo in memo_list %}
402
-
403
- <tr>
404
-
405
- <td>{{ memo.title }}</td><td>{{ memo.content }}</td>
406
-
407
- <td>
408
-
409
- {% for tag in memo.tags %}
410
-
411
- {{ tag.name }}
412
-
413
- {% endfor %}
414
-
415
- </td>
416
-
417
- </tr>
418
-
419
- {% endfor %}
420
-
421
- </tbody>
422
-
423
-
424
-
425
- <!-- 略 -->
426
-
427
-
428
-
429
- ```
430
-
431
-
432
-
433
- ```browser
434
-
435
- # エラー
436
-
437
- TypeError at /
438
-
439
- 'ManyRelatedManager' object is not iterable
440
-
441
-
442
-
443
- Request Method: GET
444
-
445
- Request URL: http://127.0.0.1:8000/
446
-
447
- Django Version: 2.2.5
448
-
449
- Exception Type: TypeError
450
-
451
- Exception Value: 'ManyRelatedManager' object is not iterable
452
-
453
- ```
454
-
455
-
456
-
457
- - get_querysetメソッドでタグをわたす
458
-
459
-
460
-
461
- MemoListViewクラスのget_querysetメソッドの中でmemoオブジェクトにmemo.tag_listという属性を追加したところ,表示できました.この実装は最も良い方法なのでしょうか.また,select_relatedメソッドはDBの読み込み回数を省略できるとのことだったので,後ろに付けたのですが,使い方は正しいのでしょうか.
462
-
463
-
464
-
465
- ```python
466
-
467
- # views.py
468
-
469
-
470
-
471
- # 略
472
-
473
-
474
-
475
- class MemoListView(ListView):
476
-
477
- model = Memo
478
-
479
- template_name = 'memo_list.html'
480
-
481
-
482
-
483
- def get_queryset(self):
484
-
485
- memo_list = Memo.objects.all().order_by('-created_at')
486
-
487
- for memo in memo_list:
488
-
489
- memo.tag_list = memo.tags.all().select_related()
490
-
491
- return memo_list
492
-
493
-
494
-
495
- # 略
496
-
497
-
498
-
499
- ```
500
-
501
-
502
-
503
- ```html
504
-
505
- # memo_list.html
506
-
507
-
508
-
509
- <!-- 略 -->
510
-
511
-
512
-
513
- <tbody>
514
-
515
- {% for memo in memo_list %}
516
-
517
- <tr>
518
-
519
- <td>{{ memo.title }}</td><td>{{ memo.content }}</td>
520
-
521
- <td>
522
-
523
- {% for tag in memo.tag_list %}
524
-
525
- 「{{ tag.name }}」
526
-
527
- {% endfor %}
528
-
529
- </td>
530
-
531
- </tr>
532
-
533
- {% endfor %}
534
-
535
- </tbody>
536
-
537
-
538
-
539
- <!-- 略 -->
540
-
541
-
542
-
543
- ```
544
-
545
-
546
-
547
-
548
-
549
- # 疑問②に関して試したこと
550
-
551
-
552
-
553
- django.views.generic.CreateViewを継承したViewClassでのタグの新規作成フォームの作成方法はわかりませんでした.django.views.generic.Viewを継承したクラスを用いて,自分でformをテンプレートに記述してみましたが,Memoテーブルのタプルの新規作成用のformタグの中で,Tagテーブルのタプルの新規作成用のフォームタグを実装する方法がわかりませんでした.調べたところformタグのネストはできないようです.このような状況の場合の良い実装方法を教えてください.別々に記述するしかないのでしょうか.
554
-
555
-
556
-
557
- ```python
558
-
559
- # views.py
560
-
561
-
562
-
563
- # 略
564
-
565
-
566
-
567
- class MemoCreateView(View):
568
-
569
-
570
-
571
- def get(self, request, *args, **kwargs):
572
-
573
- tag_list = Tag.objects.all()
574
-
575
- context = {
576
-
577
- 'tag_list': tag_list,
578
-
579
- }
580
-
581
- return render(request, 'memo_create.html', context)
582
-
583
-
584
-
585
- def post(self, request, *args, **kwargs):
586
-
587
- if request.POST["title"] != "":
588
-
589
- memo = Memo(title=request.POST['title'], content=request.POST['content'])
590
-
591
- memo.save()
592
-
593
- for tag in request.POST.getlist('tags'):
594
-
595
- memo.tags.add(tag)
596
-
597
- return redirect(reverse('memo:memo_list'))
598
-
599
-
600
-
601
- # 略
602
-
603
-
604
-
605
- ```
606
-
607
-
608
-
609
- ```html
610
-
611
- <!-- memo_create.html -->
612
-
613
- <!DOCTYPE html>
614
-
615
- <html lang="ja">
616
-
617
- <head>
618
-
619
- <meta charset="UTF-8">
620
-
621
- <title>Memo Create</title>
622
-
623
- </head>
624
-
625
- <body>
626
-
627
- <form method="post" action="{% url 'memo:memo_create' %}">
628
-
629
- <table>
630
-
631
- {% csrf_token %}
632
-
633
- <input type="hidden" name="csrfmiddlewaretoken"
634
-
635
- value="U2W58fChfSjAmFz1J55beZXviW7AOi0tyRD52QHxst7MpfCrRfhRoVnss8mWsVZH" kl_vkbd_parsed="true">
636
-
637
- <tbody>
638
-
639
- <tr>
640
-
641
- <th><label for="title">タイトル:</label></th>
642
-
643
- <td><input type="text" name="title" maxlength="255" required="" id="title" kl_vkbd_parsed="true"></td>
644
-
645
- </tr>
646
-
647
- <tr>
648
-
649
- <th><label for="content">本文:</label></th>
650
-
651
- <td><textarea name="content" cols="40" rows="10" id="content"></textarea></td>
652
-
653
- </tr>
654
-
655
- <tr>
656
-
657
- <th><label for="tags">タグ:</label></th>
658
-
659
- <td><select name="tags" multiple>
660
-
661
- {% for tag in tag_list %}
662
-
663
- <option value="{{ tag.pk }}">{{ tag.name }}</option>
664
-
665
- {% endfor %}
666
-
667
- </select></td>
668
-
669
- </tr>
670
-
671
- </tbody>
672
-
673
- </table>
674
-
675
- <button type="submit">作成</button>
676
-
677
- </form>
678
-
679
- </body>
680
-
681
- </html>
682
-
683
-
684
-
685
- ```
686
-
687
-
688
-
689
- # 環境
689
+ ### バージョン
690
690
 
691
691
  - Django 2.2.5
692
692
 

2

表示の細かい変更

2021/03/14 08:58

投稿

tomtakeru
tomtakeru

スコア4

test CHANGED
File without changes
test CHANGED
@@ -376,13 +376,11 @@
376
376
 
377
377
 
378
378
 
379
- # 試したこと
379
+ # 疑問①に関した試したこと
380
-
381
- ## ①の疑問に関して
380
+
382
-
383
-
384
-
385
- ### 試したこと(1)
381
+ - memo.tagsをforタグでまわす
382
+
383
+
386
384
 
387
385
  memo_list.htmlのなかでmemo.tagsをforタグでまわそうとしたところ,ブラウサにDjangoのエラーが出力されてしまいました.エラーによると「memo.tagsはManyRelatedMnager objectであり,iterableではない」とのことなのですが,ManyRelatedManagerとはなんなのでしょうか.
388
386
 
@@ -456,7 +454,9 @@
456
454
 
457
455
 
458
456
 
459
- ### 試しこと(2)
457
+ - get_querysetメソッドでタグをわ
458
+
459
+
460
460
 
461
461
  MemoListViewクラスのget_querysetメソッドの中でmemoオブジェクトにmemo.tag_listという属性を追加したところ,表示できました.この実装は最も良い方法なのでしょうか.また,select_relatedメソッドはDBの読み込み回数を省略できるとのことだったので,後ろに付けたのですが,使い方は正しいのでしょうか.
462
462
 
@@ -546,7 +546,7 @@
546
546
 
547
547
 
548
548
 
549
- ## ②の疑問に関して
549
+ # 疑問に関して試したこと
550
550
 
551
551
 
552
552
 

1

タイトルの変更

2021/03/14 08:55

投稿

tomtakeru
tomtakeru

スコア4

test CHANGED
@@ -1 +1 @@
1
- DjangoManyToManyFieldを用いたタグ機能の実装がわからない
1
+ DjangoManyToManyFieldを用いたタグ機能の使い方がわからない
test CHANGED
File without changes