DEV Community

kaede
kaede

Posted on

Django Tutorial Part 9 -- detail で question の子供テーブルの中身も出す。

何をするのか

https://docs.djangoproject.com/en/4.0/intro/tutorial03/#use-the-template-system

shell モードを起動して Question1 の Children を確認

docker-compose run web \
python manage.py shell

Enter fullscreen mode Exit fullscreen mode

shell モードを起動し


>>> 
from polls.models import Choice, Question
Question.objects.get(pk=1)
<Question: What's up?>

q = Question.objects.get(pk=1)
q.choice_set.all()
<QuerySet []>
Enter fullscreen mode Exit fullscreen mode

pk=1 の子供の選択肢がないのを確認する


choise テーブルの中身を入れる

質問の選択肢と投票数がないので作る。

>>> 
q.choice_set.create(choice_text='I got a raise', votes=0)

q.choice_set.create(choice_text='I made a company', votes=1)

q.choice_set.create(choice_text='My Wife is beatuful', votes=10)

q.choice_set.all()
<QuerySet [<Choice: I got a raise>, <Choice: I made a company>, <Choice: My Wife is beatuful>]>
Enter fullscreen mode Exit fullscreen mode

回答を 3 つ作った。


Django Admin で確認

Image description

残念ながらここでは今の所子供テーブルまでは見れないようだ


detail で確認

Image description

{{ question }}
Enter fullscreen mode Exit fullscreen mode

question しかないので中は見えない。

これを書き換える。


<h1>{{ question }}, {{ question.question_text }}</h1>
{{  question.choice_set.all }}
<ul>
{% for choice in question.choice_set.all %}
    <li>{{ choice }},  {{ choice.choice_text }}</li>
{% endfor %}
</ul>
Enter fullscreen mode Exit fullscreen mode

Image description

question でも question.question_text でも
question テーブルの question_text の内容が表示される。

自動的にテキストが読み込まれることになるのか?テーブルの最初のカラムだからか?

また、question.choice_set.all でシェルモードと同じように QuerySet で子供テーブルの中身が表示できた。

for で中身を回して question と同様に
choice でも choice.choice_text で choice テーブルの choice_text が表示されている

これで question の子供テーブルの choise の中身も表示できた。


まとめ

question.choice_set.all で子供テーブルの中身が出せて

{% for choice in question.choice_set.all %}
    <li>{{ choice }}
{% endfor %}
Enter fullscreen mode Exit fullscreen mode

for/endfor で回すことで 中身が展開できる。

今後

https://docs.djangoproject.com/en/4.0/intro/tutorial04/

次は form の章だが、Django の Template で Form を書くのはないと思うので、REST FRAMEWORK に戻ろうかと思っている

https://dev.to/kaede_io/django-rest-framework-tutorial-dezuo-tutaapurinosiriaraizazhou-riwoque-ren-suru-316b

シリアライザを短く書いて、リクエスト叩いて登録できる形に持っていくところが残っているので。

Top comments (0)