2017-05-23 13 views
0

私のDjangoプロジェクトでは、データベースのすべてのテーブルにis_activeブール型のカラムがあります。私またはフレームワークがデータベースにアクセスするたびに、アクティブなレコードのみを表示します。これを達成するための標準的な方法は何ですか?確かに、すべてのクエリでis_activeをチェックしたくありません。アクティブなレコードのみを選択するdjangoクエリ

+0

使用モデルのようにする必要がありますマネージャー – Thameem

答えて

2

をジャンゴdocumentaionを確認してくださいこれを行う最も簡単な方法は、このように、カスタムモデルマネージャを作成することです

class MyModel(models.Model): 
    objects = models.Manager() 
    active = OnlyActiveManager() 

次に、このように使用します。

foo = MyModel.active.all() 

デフォルトのマネージャー(objects)の代わりに使用することもできますが、カスタムクエリを実行してアクティブでないすべてのレコードを取得する必要があります。あなたのモデルのためのマネージャークラスを記述することができます

0

これは、djangoモデルマネージャを使用して行うことができます。

class OnlyActiveManager(models.Manager): 
    def get_queryset(self): 
     return super(OnlyActiveManager, self).get_queryset().filter(is_active=True) 

を次に、あなたのモデルに追加:

詳細はdjango documentaion

0

、サンプルモデルマネージャは以下のとおりである、より多くのあなたは、Djangoの公式ウェブサイトに

class MediaManager(models.Manager): 

    def get_queryset(self): 
     return MediaQuerySet(self.model, using=self._db) 

    def active(self): 
     return self.filter(is_active=True) 

class Media(models.Model): 
    (..model fields..) 
    objects = MediaManager() 

を参照することができため、クエリは

media = Media.objects.active() 
関連する問題