Django objectsの使い方を簡単解説

プログラミング

Djangoでモデル処理をしてる時にobjectsって必須なんだけど、いまいち理解できてなくて…

objectsが必要だったり、不要だったり、メソッドがいっぱいあって難しいよね!
1つ1つゆっくり見ていこう!

objectsとは

まず、objcetsはモデルマネージャと呼ばれるものらしいです。
データベースを操作するのに使われます(取り出したりできますね!)

基本はviews.pyで以下のように使います。

from .models. import Data

data = Data.objects.all() #Dataというモデルクラスの全データをdataに格納

通常は、
インスタンス = モデルクラス.モデルマネージャ.モデルマネージャのメソッド
という使い方がされることがわかります。

all()というのはモデルマネージャのメソッドのひとつになります。
このモデルマネージャの種類によって、データの取得の仕方が変わります。

このモデルマネージャについて詳しく見ていきましょう。

objectsのメソッドについて

objectsメソッドでモデルクラスからデータを取得する主要メソッドを一覧にまとめてみました。

条件メソッド
全て取得all()
検索に一致したものを取得
(1つだけ取得)
get(**kwargs)
指定日付で最新のものを取得
(1つだけ取得)
lastest(*fields)
指定日付で最古のものを取得
(1つだけ取得)
earliest(*filelds)
クエリセットの先頭を取得
(1つだけ取得)
first()
クエリセットの最後尾を取得
(1つだけ取得)
last()
辞書のリストで取得values(*fields, **expressions)
タプルのリストで取得values_list(*fields, flat=False, named=False)
参考:https://qiita.com/okoppe8/items/66a8747cf179a538355b

簡単なプログラムで使い方を見てみましょう。

モデルを以下のように定義します。

from django.db import models


class Fruit_price(models.Model):

        name = models.CharField(max_length=20)
        quantity = models.IntegerField()
        price = models.IntegerField()

        def __str__(self):
            return self.name + '_' + str(self.quantity) + '_' + str(self.price)

views.pyは以下のようにします。

from django.shortcuts import render
from django.views import View

from .models import Sales_volume

class IndexView(View):
    def get(self, request):

        obj = Fruit_price.objects.all()

        params = {
            'fruit_price': obj
        }
        
        return render(request, 'example_app/index.html', params)

データベースにはいくつか事前に登録してあります。
モデルマネージャのメソッドをall()にした結果は以下のようになります。

いろいろ条件を付けて、取得してみましょう。

from django.shortcuts import render
from django.views import View

from .models import Fruit_price

class IndexView(View):
    def get(self, request):

        obj_get = Fruit_price.objects.get(quantity=10)
        obj_last = Fruit_price.objects.last()
        obj_values = Fruit_price.objects.values('name', 'price')
        obj_values_list = Fruit_price.objects.values_list('name', 'price')

        params = {
            'obj_get': obj_get,
            'obj_last': obj_last,
            'obj_values': obj_values,
            'obj_values_list': obj_values_list,
        }

        return render(request, 'example_app/index.html', params)
{% block main %}
  <h2>ogj_get</h2>
  {{ obj_get }}

  <h2>ogj_last</h2>
  {{ obj_last }}

  <h2>obj_values</h2>
  {{ obj_values }}

  <h2>obj_values_list</h2>
  {{ obj_values_list }}

{% endblock %}

出力結果はこんな感じになります。

valuesは辞書values_listはリストの形になって帰ってくることがわかりますね。

今回の方法だと

  • 全てを取得する
  • データの中の1つを取得する(valuesやvalues_list以外で)

しか選択肢がありませんでした。
しかし、例えば同じ名前のものを複数取り出したいときはどうしたらよいでしょうか。

次回の記事ではこの場合の解決方法を解説していきます。

Django objects.filter()の使い方
前回はobjectsメソッドでデータを取得する方法を教えてもらったね 今回は続きで、filter()の使い方を解説していくね! filter()とは 前回は objectsというモデルマネージャall()などのobjectsのメソッド につ...

コメント

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