Django objects.filter()の使い方

プログラミング

前回はobjectsメソッドでデータを取得する方法を教えてもらったね

今回は続きで、filter()の使い方を解説していくね!

filter()とは

前回は

  • objectsというモデルマネージャ
  • all()などのobjectsのメソッド

について解説しました。

前回紹介したメソッドでは、all()ですべて取り出すか、get()等で1つだけ取得するしか方法がありませんでした。

そこで今回は、filter()というメソッドを使い、複数データを条件で絞り込んで取得する方法を解説したいと思います。

filter()とは簡単に説明すると、オブジェクトの取得の条件を設定し、取得結果を厳選するために使用します。

filter()の使い方

さっそく簡単なfilter()の使い方を見てみましょう。

モデルは前回のものを使用します。

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)

事前にデータベースに登録をしてあります。

前回使用したget()を使用して、名前=みかんを取得しようとしても、名前=みかんのデータは2つあるため、個数や価格して1つに絞る必要がありました。
今回は、filter()を使用して重複項目があるものを取得してみましょう。

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

from .models import Fruit_price

class IndexView(View):
    def get(self, request):
        obj_filter_mikan = Fruit_price.objects.filter(name='みかん').all()

        params = {
            'filter_mikan': obj_filter_mikan
        }

        return render(request, 'example_app/index.html', params)

name=’みかん’として、名前がみかんのものを取り出してみました。

もし、名前=みかんの先頭を取り出したければ

obj_filter_mikan = Fruit_price.objects.filter(name='みかん').first()

としたりし、条件を加えていけばいいでしょう。

また、filterはAND検索や、OR検索を行うことができます。

AND検索では、複数のfieldを指定することによってできます。

obj_filter_mikan = Fruit_price.objects.filter(name='みかん', price=100).all

OR検索では、

from django.db.models import Q  #重要

obj_filter_mikan = Fruit_price.objects.filter(Q(name='みかん') | Q(name='ばなな')).all()

というように、filter(Q(*field) | Q(*field))と記述することで検索できます

まとめ

以上、2回にわたってObjectsやObjectsメソッドを扱ってきましたがいかがでしたでしょうか。

Djangoでデータベースを扱う上で、最低限の内容だと思いますので、ぜひじっくり理解していただけたらと思います!

filter()の使い方は他にもたくさんあります。
ぜひマスターして、自分なりの使い方を身に着けてください!

コメント

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