2017-09-28 13 views
1

私はプライバシーのためにModelMangerを実装しています。フィルタ内の複数のロジック

基本的に、私はポスト(布)のフィールドonly_metrue

  • で、ポスト(布)の所有者がユーザーでログインしていない場合は、この場合

    1. ためのいくつかのクエリセットを除外したいです。

      class ClothManager(models.Manager): 
          def all(self, *args, **kwargs): 
           return super(ClothManager, self).filter(???) 
      

    ユースケース

    • リターン適量をonly_meたちはself.request.user呼び出すことができます真とユーザー= self.request.userを(IF = only_meは
    • 戻りQS = falseの場合
    • )?モデルでonly_me = trueのユーザーが
    をself.request.userされていない場合は適量を返しません

    それは

  • 答えて

    1

    を必要としていた場合、私はあなたが試すことができQを使用することができます。

    class ClothManager(models.Manager): 
        def get_queryset(self, user=None, request=None, **kwargs): 
         qs = super(ClothManager, self).get_queryset() 
         user = request.user if not user else user 
         if request: 
          user = request.user if not user else user 
    
         if user: 
          qs = qs.exclude(Q(only_me=True) & ~Q(user=self.request.user)) 
         return qs 
    
        def __call__(self, user=None, request=None, **kwargs): 
         return self.get_queryset(user=user, request=request, **kwargs) 
    

    とどこかのコードで:

    qs = YourModel.objects(request=request) 
    
    +0

    ではなくget_queryset以外の方法はありますか? –

    +0

    yes 'YourModel.objects(request = request).filter(condition)'、すべての標準的な方法を使用することができます。 –

    +0

    私のコンピュータで試してみましょう –