前回は「とうとうここまで来て諦めないとダメなのか?」という絶望と「何やねん!このチュートリアル!!」という怒りが炸裂しました。
だがしかーし!
気付いてしまったのですよ!重大なミスを!!
フォームで設定しているはずの「ラジオボタンが無い」ということがヒントになりました。
よくよく考えると、投票なのに「投票ページはあるものの選択肢が無い」という奇妙なページを作っていたことに気が付いたのです。
慌ててチュートリアルを見直しましたらさ
はじめての Django アプリ作成、その2 | Django documentation | Django
投票の中身を入れてる所があるんですよ!!
タイトルは
「API で遊んでみる」
なーんてフザケたタイトル付けるから「遊びとかいらんわー」っって見直しながらも対話シェル部分は完全にすっ飛ばして読んでたんですよっ!!(おいッ)
で、中身をよくよく見たら実はここの対話シェルで質問の中身を作ってるわけです!!
とにかく最初からチュートリアル通りに対話シェルをやってみるとエラーを吐いたりするわけですが、エラーは放置して(コラコラ)ドンドン進めていった記録です↓。
raspberrypi:~/draemon $ python3 manage.py shell
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170124] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from polls.models import Choice, Question
>>> Question.objects.all()
<QuerySet [<Question: What's UP?>, <Question: What's up?>]>
>>> Question.objects.filter(id=1)
<QuerySet [<Question: What's UP?>]>
>>> Question.objects.filter(question_text__startswith='What')
<QuerySet [<Question: What's UP?>, <Question: What's up?>]>
>>> from django.utils import timezone
>>> >>> current_year = timezone.now().year
File "<console>", line 1
>>> current_year = timezone.now().year
^
SyntaxError: invalid syntax
>>> from django.utils import timezone
>>> current_year = timezone.now().year
>>> Question.objects.get(pub_date__year=current_year)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python3.5/dist-packages/django/db/models/manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/django/db/models/query.py", line 403, in get
(self.model._meta.object_name, num)
polls.models.Question.MultipleObjectsReturned: get() returned more than one Question -- it returned 2!
>>> Question.objects.get(pk=1)
<Question: What's UP?>
>>> q = Question.objects.get(pk=1)
>>> q.was_published_recently()
True
>>> q = Question.objects.get(pk=1)
>>> q.choice_set.all()
<QuerySet []>
>>> q.choice_set.create(choice_text='Not much', votes=0)
<Choice: Not much>
>>> q.choice_set.create(choice_text='The sky', votes=0)
<Choice: The sky>
>>> c = q.choice_set.create(choice_text='Just hacking again', votes=0)
>>> c.question
<Question: What's UP?>
>>> q.choice_set.all()
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
>>> q.choice_set.count()
File "<console>", line 1
q.choice_set.count()
^
IndentationError: unexpected indent
>>> q.choice_set.count()
3
>>> Choice.objects.filter(question__pub_date__year=current_year)
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
>>> c = q.choice_set.filter(choice_text__startswith='Just hacking')
>>> c.delete()
(1, {'polls.Choice': 1})
>>> exit()
とまあ、なんだかんだで中身が出来たっぽいのでサーバー起動してみるわけです。
raspberrypi:~/draemon $ python3 manage.py runserver 0:8000
すると!「What's UP?」って立ち上がって投票できるんですよコレ!
ラジオボタンもあるし! 散々悩ませてWhat's UP(どうしたの?)じゃねーよっ!(笑)
ちゃんとカウントも出来るし、チュートリアルはカンペキでした。
はいスミマセン、完全に僕のミスです。
勝手に読み飛ばして本当にスミマセンでした(反省)。
ちなみに、新しく作ったプロジェクトはこれまでの「dream(ドリーム)」ではなく、「draemon(ドラえもん)」にしています。気付きましたか?
タイトルでもヒントとして出していましたが、これで気付いたヒトはすごい!!
実は僕は凄い事に気付いてしまったのですよ!!
「プロジェクト名どしよっかなー?」って考えてたんですけどね、「dream」に近いものを探しててきとーに「dram・・・・」とかって考えてたら
「え?まって!DORAEMON!ってもしかしてDREAM ON??ウソ?マジかこれ?」
って調べたら上のブログのように同じように考えてる人があるものの、単に「どら猫」と「五右衛門」を適当に合わせただけという説のほうが有力らしいです。
けど作者の藤子・F・不二雄さんってすごい頭のキレる人で、例えばジャイアンは剛田武って名前があるけどジャイ子は名前が無い。何でかというと「同じ名前の子が虐められるかもしれないから」という子供の気持ちをとことん考えて作ってあるそうなんですね。
だからdream onの説もあながち後付け説ではないような気がするんです。といかそちらの方が説得力がある気がします!何故かというと、
この都市伝説はご存知でしょうか?↓
いやゾクっとするでしょ、↓こんなの。
実はここまでウケることを考えていなかった作者が「実は植物人間の夢なんですー」なんて子供の夢を壊しそうでとても言えなくて慌てて後から「いやいや、単なるどら猫ですよ」と言ったとしても不思議では無いでしょ?!
だって「野良猫」じゃなく「どら猫」ですよ?「どら猫」の「どら」って「どら息子」の「どら」と同じで、「どら猫」って「盗みや悪戯など、人にたいして迷惑な行為をする猫」のことです。起き上がりこぼしを見てどら猫を発想します?そちらのほうが無理矢理な感じしないですか?
てことで、僕はこの「DREAM ON」説を支持したいです。
個人的に好きなドラえもんの都市伝説はしずかちゃんのママがアバズレ説ですが(どーでもいい)
スミマセン・・・今回は完全に脱線しました。ガチドラ勢に怒られそうですね・・・
今回の教訓「チュートリアルを勝手な判断で読み飛ばさない!」(あたりまえー)