Django Tutorial Part 9 -- detail で question の子供テーブルの中身も出す。
kaede
Posted on April 17, 2022
何をするのか
https://docs.djangoproject.com/en/4.0/intro/tutorial03/#use-the-template-system
shell モードを起動して Question1 の Children を確認
docker-compose run web \
python manage.py shell
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 []>
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>]>
回答を 3 つ作った。
Django Admin で確認
残念ながらここでは今の所子供テーブルまでは見れないようだ
detail で確認
{{ question }}
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>
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 %}
for/endfor で回すことで 中身が展開できる。
今後
https://docs.djangoproject.com/en/4.0/intro/tutorial04/
次は form の章だが、Django の Template で Form を書くのはないと思うので、REST FRAMEWORK に戻ろうかと思っている
シリアライザを短く書いて、リクエスト叩いて登録できる形に持っていくところが残っているので。
Posted on April 17, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.