DEV Community

kaede
kaede

Posted on • Updated on

Django Tutorial Part 6 -- polls アプリでテーブルの中身を好きな順番で並べる

https://docs.djangoproject.com/en/4.0/intro/tutorial03/#write-views-that-actually-do-something

from django.shortcuts import render
from django.http import HttpResponse
from .models import Question

def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:3]
    output = ', '.join([q.question_text for q in latest_question_list])
    return HttpResponse(output)
Enter fullscreen mode Exit fullscreen mode

Question テーブルを models からインポート

<QuerySet [
  <Question: What's new?>, <Question: Question 2>,
  <Question: Questions 3>, <Question: Questions 4>
]>
Enter fullscreen mode Exit fullscreen mode

Question の objects を作成日順に 3 つまでに制限して取得する。

["What's new?", 'Question 2', 'Questions 3', 'Questions 4']
Enter fullscreen mode Exit fullscreen mode

, で 先ほどのリストを展開したものを連結する

Image description

admin でみると Questinons 4 まである状態でも

Image description

最新の 4 から 2 まで 3 つだけ並んだ。

latest_question_list = Question.objects.order_by('-pub_date')[:4]
Enter fullscreen mode Exit fullscreen mode

これを 4 に変更すると

Image description

一番古い、最新から 4 つ目の question_text まで並んだ。

latest_question_list = Question.objects.order_by('pub_date')[:4]
Enter fullscreen mode Exit fullscreen mode

-pub_datepub_date に変更すると、

Image description

古い順で並ぶ。

output = ' | '.join(
  [q.question_text for q in latest_question_list]
)
Enter fullscreen mode Exit fullscreen mode

区切りを | に変更すると

Image description

これで区切られる。view を気にするのはフロントの仕事になるので、こうやってみやすい区切り文字に変更することはないと思うが。

次回は template。
polls/template/index.html を view に組み込み、テーブルのデータを HTML に渡すようにする。

Top comments (0)