デフォルトの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()