Django レコード取得の基本② 辞書型やリスト型でレコードを取得するには【Python】【初心者向け】

Django

この記事の最終更新日: 2020年10月31日

allメソッドで取得したレコード=QuerySetクラスのインスタンス

前回はレコードの全件取得、検索して1レコードのみ取得する方法を解説しました。

ここで皆さんに知っておいて欲しいことがあります。

実はallメソッドで取得したレコードは、QuerySetというクラスのインスタンスなのです。

そして、このクラスは非常に便利なメソッドを持っています。

レコードを辞書型で取得できる、valuesメソッド

今まで解説した通りにインスタンスから値を取り出すことも可能なのです。

しかし、valuesメソッドを使うことで、レコードを辞書型で取り出すことも可能です。

辞書型で取り出すことで、使い勝手が格段に上がるので、積極的な使用をおすすめします。

views.py

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

def index(request):
    data = Customer.objects.all().values('id','name')
    params = {
        'title':'DB_Practice',
        'message':'all data:',
        'data': data,
    }
    return render(request, 'hello/index.html',params)

index,py

{% load static %}
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>{{title}}</title>
    </head>
    <body>
        <h1>{{title}}</h1>
        <p>{{data}}</p>
        <table>
            <tr>
                <th>data</th>
            </tr>
        {% for item in data %}
            <tr>
                <td>{{item}}</td>
            </tr>
        {% endfor %}
    </table>
    </body>
</html>

実行画面

辞書型として取得できているのがわかる。
valuesメソッド

valuesメソッドは、allメソッドの後ろに付けて使用します。(このように、メソッドの後ろに付けるメソッドをメソッドチェーンと言います。)

引数に項目名を入れると、その項目を辞書型として保持します。

data = Customer.objects.all().values('id','name')

レコードをリスト型で取得できる、values_listメソッド

values_listメソッドを使うことで、レコードをリスト型で取り出すことも可能です。

リスト型も、使い勝手が良い型なので、こちらの利用もおすすめです。

views.py

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

def index(request):
    data = Customer.objects.all().values_list('id','name')
    params = {
        'title':'DB_Practice',
        'message':'all data:',
        'data': data,
    }
    return render(request, 'hello/index.html',params)

index.html

#上記と同様のため、省略

実行画面

リスト型で取得できているのがわかる。
values_listメソッド

values_listメソッドも、allメソッドの後ろに付けメソッドチェーンとして利用します。

引数に項目名を入れると、その項目をリスト型として保持します。

data = Customer.objects.all().values('id','name')

その他の便利なメソッド

firstメソッド

firstメソッド

allなどで得られたレコードの、最初のものだけを返すメソッドです。

data = Customer.objects.all().first()

また、このように、valuesやvalues_listの後ろにつけて利用することもできます。

data = Customer.objects.all().values_list('id','name').first()

lastメソッド

lastメソッド

allなどで得られたレコードの、最後のものだけを返すメソッドです。

data = Customer.objects.all().last()

また、このように、valuesやvalues_listの後ろにつけて利用することもできます。

data = Customer.objects.all().values_list('id','name').last()

countメソッド

Countメソッド

allなどで得られたレコードの行数を返すメソッドです。

data = Customer.objects.all().count()

以上、レコードを取得するメソッドの基本についての解説でした。

次回に続きます。

コメント

タイトルとURLをコピーしました