Djangoでデフォルトのfilter(スコープ)を設定する方法【カスタムフィルタ】

デフォルトのfilter(スコープ)を設定する方法

from django.db import models

class MyModelDefaultQuerySet(models.QuerySet):
    def default_filter(self):
        # 例: is_active=True のオブジェクトのみ取得
        return self.filter(is_active__isnull=False)

class MyModelDefaultManager(models.Manager):
    def get_queryset(self):
        # デフォルトでカスタムQuerySetを返す
        return MyModelDefaultQuerySet(self.model, using=self._db).default_filter()

class MyModel(models.Model):
    name = models.CharField(max_length=100)
    is_active = models.BooleanField(default=True)

    # カスタムManagerを使用
    objects = MyModelDefaultManager()

    # すべてのデータが取れる道も用意しておく
    all_objects = models.Manager()

使い方

# 設定したフィルタがかかる
MyModel.objects.all()

# 本当のすべてのデータが取れる
MyModel.all_objects.all()

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です