libro
www.tuyano.com
初心者のためのDjango 2.0入門

データベースアクセスを行う (3/5)

作成:2018-01-06 08:06
更新:2018-01-06 08:06

■IDでレコードを取得する

全レコードを取り出すのは簡単でしたが、では特定のレコードだけを取り出すにはどうするのでしょうか。例えば、指定のIDのレコードだけを取り出す、というような場合ですね。

これは、QuerySetの「get」メソッドを使うのが基本でしょう。これは以下のように利用します。
変数 = モデル .objects.all().get( 条件 )

allの後に続けてgetを呼び出します。引数には、検索するレコードの条件となる文を指定します。これは、とりあえず「○○=××」のような式を書く、と覚えておけばいいでしょう。「項目名 = 値」というように記述することで、その項目の値が指定のものであるレコードだけを検索します。

例えば、get(id=1) というようにすれば、IDの値が1のレコードを検索するわけですね。このgetは、QuerySetではなく、検索条件に合致したモデルインスタンスをそのまま返します。allとは戻り値が異なるので注意して下さい。

では、実際の利用例を挙げておきましょう。views.pyを下のリスト欄のように書き換えて下さい。そして、「hello」内のurl.pyを開き、urlpatternsの部分を以下のように修正しましょう。
urlpatterns = [
    path('<int:id>/', views.index, name='index'),
    path('', views.index, name='index'),
]

これで、/helloとアクセスすれば全レコードが表示され、/hello/番号 とすれば、そのID番号のレコードだけが表示されるようになります。ここではindex関数の定義を以下のように修正してあります。
def index(request, id=0):
urlpatternsを追加することで、URLからidの値を渡せるようになります。このidを元に、以下のようにレコードを検索しています。
data = Person.objects.all().get(id=id)
data = [data]

get(id=id)を追加することで、指定のIDのレコードだけが取り出されるようになりました。index.html側では、イテレータで値が渡される前提で繰り返し処理をしていますので、取り出したモデルインスタンスをリストにおさめる形にする必要があります。data = [data]というようにしてリストにしておけば、全レコードでも単レコードでも同じようにindex.htmlで表示できますね。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

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

from .models import Person

def index(request, id=0):
    if id == 0:
        data = Person.objects.all()
    else:
        data = Person.objects.all().get(id=id)
        data = [data]
    context = {
        'msg': 'Personのリスト',
        'data': data,
    }
    return render(request, 'hello/index.html', context)
※関連コンテンツ

「初心者のためのDjango 2.0入門」に戻る