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) |
簡単なプログラムで使い方を見てみましょう。
モデルを以下のように定義します。
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のメソッド につ...
コメント