... う。 初めてのテスト作成 ¶ バグを見つけたとき ¶ 運よく、 polls のアプリケーションにはすぐに修正可能な小さなバグがありました。 Question.was_published_recently() のメソッドは Question が昨日以降に作成された場合に True を返すのですが(適切な動作)、 Question の ... $ python manage.py shell ...\> py manage.py shell >>> import datetime >>> from django.utils import timezone >>> # create a Question instance with pub_date 30 days in the future >>> future_question = Question ( pub_date = timezone . now () + datetime . ti ... medelta ( days = 30 )) >>> # was it published recently? >>> future_question . was_published_recently () True 将来のことは「最近(recent)」ではないため、これは明らかに間違いです。 バグをあぶり出すた ... ... う。 初めてのテスト作成 ¶ バグを見つけたとき ¶ 運よく、 polls のアプリケーションにはすぐに修正可能な小さなバグがありました。 Question.was_published_recently() のメソッドは Question が昨日以降に作成された場合に True を返すのですが(適切な動作)、 Question の ... $ python manage.py shell ...\> py manage.py shell >>> import datetime >>> from django.utils import timezone >>> # create a Question instance with pub_date 30 days in the future >>> future_question = Question ( pub_date = timezone . now () + datetime . ti ... medelta ( days = 30 )) >>> # was it published recently? >>> future_question . was_published_recently () True 将来のことは「最近(recent)」ではないため、これは明らかに間違いです。 バグをあぶり出すた ... ... wを polls/views.py に追加していきましょう。これから追加するviewでは引数をとります。 polls/views.py ¶ def detail ( request , question_id ): return HttpResponse ( "You're looking at question %s ." % question_id ) def results ( request , question_id ): respo ... nse = "You're looking at the results of question %s ." return HttpResponse ( response % question_id ) def vote ( request , question_id ): return HttpResponse ( "You're vot ... ing on question %s ." % question_id ) 次の path() コールを追加して、新しいviewを polls.urls モジュールと結びつけます。 polls/urls.py ¶ fro ... ... wを polls/views.py に追加していきましょう。これから追加するviewでは引数をとります。 polls/views.py ¶ def detail ( request , question_id ): return HttpResponse ( "You're looking at question %s ." % question_id ) def results ( request , question_id ): respo ... nse = "You're looking at the results of question %s ." return HttpResponse ( response % question_id ) def vote ( request , question_id ): return HttpResponse ( "You're vot ... ing on question %s ." % question_id ) 次の path() コールを追加して、新しいviewを polls.urls モジュールと結びつけます。 polls/urls.py ¶ fro ... ... jango uses to update your database schema to match your current models. これから開発する簡単な poll アプリケーションでは、 Question と Choice の2つのモデルを作成します。 Question には質問文と公開日時があります。 Choice には選択肢のテキストと vote という2 ... つのフィールドがあります。各 Choice は1つの Question に関連づけられています。 Django では、こうした概念を簡単な Python クラスで表現できます。 polls/models.py ファイルを以下のよ ... うに編集してください: polls/models.py ¶ from django.db import models class Question ( models . Model ): question_text = models . CharField ( max_length = 200 ) pub_date = models . DateTimeField ( "date publ ... ... jango uses to update your database schema to match your current models. これから開発する簡単な poll アプリケーションでは、 Question と Choice の2つのモデルを作成します。 Question には質問文と公開日時があります。 Choice には選択肢のテキストと vote という2 ... つのフィールドがあります。各 Choice は1つの Question に関連づけられています。 Django では、こうした概念を簡単な Python クラスで表現できます。 polls/models.py ファイルを以下のよ ... うに編集してください: polls/models.py ¶ from django.db import models class Question ( models . Model ): question_text = models . CharField ( max_length = 200 ) pub_date = models . DateTimeField ( "date publ ... ... を更新して、HTML の <form> 要素を入れましょう。 polls/templates/polls/detail.html ¶ < form action = " {% url 'polls:vote' question.id %} " method = "post" > {% csrf_token %} < fieldset > < legend >< h1 > {{ question.question_text }} </ h1 ></ legend > { ... % if error_message %} < p >< strong > {{ error_message }} </ strong ></ p > {% endif %} {% for choice in question.choice_set.all %} < input type = "radio" name = "choice" id = "choice {{ forloop .counter }} " value = " {{ choice.id }} " ... # (#は選んだ選択肢のID)が送信されます。これは、HTMLフォームの基本的な概念です。 フォームの action を {% url 'polls:vote' question.id %} に設定し、 method="post" を指定しています。 ( method="get" ではなく) method="post" を使用することは非常に重要です。な ... ... を更新して、HTML の <form> 要素を入れましょう。 polls/templates/polls/detail.html ¶ < form action = " {% url 'polls:vote' question.id %} " method = "post" > {% csrf_token %} < fieldset > < legend >< h1 > {{ question.question_text }} </ h1 ></ legend > { ... % if error_message %} < p >< strong > {{ error_message }} </ strong ></ p > {% endif %} {% for choice in question.choice_set.all %} < input type = "radio" name = "choice" id = "choice {{ forloop .counter }} " value = " {{ choice.id }} " ... # (#は選んだ選択肢のID)が送信されます。これは、HTMLフォームの基本的な概念です。 フォームの action を {% url 'polls:vote' question.id %} に設定し、 method="post" を指定しています。 ( method="get" ではなく) method="post" を使用することは非常に重要です。な ... ... 実行に問題がある場合は、FAQ の Getting Help セクションに進んでください。 admin フォームのカスタマイズ ¶ admin.site.register(Question) の呼び出しによって Question モデルを登録したことで、Django はデフォルトの形式でオブジェクトを表示できました。 admin フォー ... 録する時にオプションを指定します。 ためしに、編集フォームでのフィールドの並び順を並べ替えてみましょう。 admin.site.register(Question) の行を以下のように置き換えてみてください。 polls/admin.py ¶ from django.contrib import admin from .models import Question ... class QuestionAdmin ( admin . ModelAdmin ): fields = [ "pub_date" , "question_text" ] admin . site . register ( Question , QuestionAdmin ... ... 実行に問題がある場合は、FAQ の Getting Help セクションに進んでください。 admin フォームのカスタマイズ ¶ admin.site.register(Question) の呼び出しによって Question モデルを登録したことで、Django はデフォルトの形式でオブジェクトを表示できました。 admin フォー ... 録する時にオプションを指定します。 ためしに、編集フォームでのフィールドの並び順を並べ替えてみましょう。 admin.site.register(Question) の行を以下のように置き換えてみてください。 polls/admin.py ¶ from django.contrib import admin from .models import Question ... class QuestionAdmin ( admin . ModelAdmin ): fields = [ "pub_date" , "question_text" ] admin . site . register ( Question , QuestionAdmin ... 2026年10月08日