过滤器中的多个逻辑

时间:2017-09-28 14:13:49

标签: django django-models

我正在实施ModelManger以保护隐私。

基本上,我想为此案例排除一些查询集

  1. 如果帖子(布料)的字段only_metrue
  2. 帖子(Cloth)的所有者未登录用户。

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

    • 如果only_me = false
    • 则返回qs
    • if qs if only_me = true and user = self.request.user(我们可以在Model中调用self.request.user吗?)
    • 如果only_me = true且用户不是self.request.user
    • ,请勿返回qs

    如果需要,我可以使用Q

1 个答案:

答案 0 :(得分:1)

您可以尝试:

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)