2017-01-18 3 views
2

私はDjangoチュートリアルを進んでいます。私は投票アプリケーションを作成するステップ3にいます。 "question_id"と呼ばれる変数があり、正確にどこが定義されているのか、どこから来ているのかわかりません。私は以下のファイルを投稿します。私の唯一の推測では、Models.pyにクラスQuestionが定義されているときに、この変数がDjangoによって何らかの形で内部的に作成されますが、わかりません。それは "質問"クラスで定義されていません。ここでDjangoを学んでいますが、変数と混同しています

私のファイルは、以下のとおりです。

views.py

from django.shortcuts import render 
from django.http import HttpResponse 
from django.template import loader 

from .models import Question 


def index(request): 
    latest_question_list = Question.objects.order_by('-pub_date')[:5] 
    context = {'latest_question_list': latest_question_list} 
    return render(request, 'polls/index.html', context) 


#def index(request): 
# return HttpResponse("Hello, world. You're at the polls index.") 

def detail(request, question_id): 
    return HttpResponse("You're looking at question %s." % question_id) 

def results(request, question_id): 
    response = "Your looking at result of question %s." 
    return HttpResponse(response % question_id) 

def vote(reqeust, question_id): 
    return HttpResponse("You're voting on question %s." % question_id) 

urls.py

from django.conf.urls import url 

from . import views 

urlpatterns = [ 
    #ex: /polls/ 
    url(r'^$', views.index, name='index'), 
    #ex: /polls/5 
    url(r'^(?P<question_id>[0-9]+/$)', views.detail, name='detail'), 
    #ex: /polls/5/result/ 
    url(r'^(?P<question_id>[0-9]+/results/$)', views.results, name='results'), 
    #ex: /polls/5/vote 
    url(r'^(?P<question_id>[0-9]+/vote/$)', views.vote, name='vote'), 
] 

models.py

import datetime 

from django.db import models 
from django.utils import timezone 


class Question(models.Model): 
    question_text = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 

    def __str__(self): 
     return self.question_text 

    def was_published_recently(self): 
     return self.pub_date >= timezone.now() - datetime.timedelta(days=1) 



class Choice(models.Model): 
    question = models.ForeignKey(Question, on_delete=models.CASCADE) 
    choice_text = models.CharField(max_length=200) 
    votes = models.IntegerField(default=0) 

    def __str__(self): 
     return self.choice_text 

は 、あなたの助けをありがとうネーミン

+0

Djangoチュートリアル(https://docs.djangoproject.com/ja/1.10/intro/tutorial03/)によると、 HTTPリクエストのパラメータURLはurls.pyで渡され、paramsは提供されたURLの一部です。 – jdv

答えて

1

表示されている3つのビューのquestion_idは、djangoによって自動的に作成されます。この目的のためにURLが入力されます。あなたのビューは、名前のブラウザにpolls/somenumber/に入力した場合、それはこのように、ここで

url(r'^(?P<question_id>[0-9]+/$)', views.detail, name='detail'), 

を定義していますdetail取得者はquestion_idという名前の変数とurls.pyに使用する正規表現は、このことを保証somenumber

の値を渡します数字であり、何かではありません。詳細については

は参照してください:https://docs.djangoproject.com/en/1.10/topics/http/urls/

+0

ありがとう、私の考えだったが、私は確信していなかった。 –

+0

私は十分な評判を持ってすぐに頭をアップして病気になることを祈ってくれてありがとう。 :) –

+0

あまり心配しないでください。私からあなたの質問にあなたの道を得るためのものがある – e4c5

0

これは、関数内のパラメータであるviews.pyと、urls.pyで指定されたURLの形式です。

0

question_idだけのデータベース・レコードの主キーに割り当てられた名前です。これは役に立ちました:

+0

それは、ありがとう。 –

+0

問題ありません。 –

0

他のForeignKey変数が定義されていないDjangoでモデルを作成すると、フレームワークはこれらのオブジェクトの一意の識別子として機能するidフィールドを自動的に生成します。

チュートリアル質問は次のように定義された場合には:

Djangoはのようになります隠されたIDフィールドを追加して、カバーの後ろ
class Question(models.Model): 
question_text = models.CharField(max_length=200) 
pub_date = models.DateTimeField('date published') 

def __str__(self): 
    return self.question_text 

def was_published_recently(self): 
    return self.pub_date >= timezone.now() - datetime.timedelta(days=1) 

id = models.ForeignKey(Integer) 

各質問オブジェクトあなたが意志を作成しますそれに関連付けられたユニークな増分IDを持っています(管理ポータルを見てください)。

あなたの質問にもっと具体的に答えるために、question_idがビューから渡されています。チュートリアルを通してもっと見ると、彼らはquestion_idをpk(主キー)として読み替えるように変更します。

URL http://127.0.0.1/question/polls/4は、詳細(request、question_id)を呼び出します。この場合、4の値を関数に渡すだけで、そのIDをHttpResponseに返すだけです。チュートリアルの後半では、代わりにID 4のQuestionオブジェクトを返すようになります。

このビットは、基本的に数値のように見えるquestion_idという変数を渡します。 (?P [0-9] +/$)

+0

ありがとうございました。私は、Django感染がQuestionクラスの作成時に "question_id"を生成したとは思っていませんでした。 Djangoがあなたのために生成するクラス内で外部キーが定義されていないかどうかを知ることは良いことです。それは、例えば命名が同じであるかどうか知っていますか? models.pyに "Author"クラスを作成し、 "Author"クラスにforeignkeyを定義しないと、そのDjangoは "author_id"という名前になりますか? –

+0

Djangoは "id"というフィールドを作成します。このケースではquestion_idの理由は実際にあなたのurls.pyのためです。 をコード化したときに変数名を定義しました。 – SuperTetelman

+0

ありがとうございました! –

関連する問題