本文介绍了过滤器中的多种逻辑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在实施ModelManger以保护隐私。
I'm implementing ModelManger for privacy.
基本上,对于这种情况,我想排除一些查询集
Basically, I want to exclude some queryset for this case
- 如果发布(布料)的字段
only_me
为true
-
post(Cloth)的所有者尚未登录用户。
- if post(Cloth)'s field
only_me
istrue
and owner of post(Cloth) is not logged in user.
class ClothManager(models.Manager):
def all(self, *args, **kwargs):
return super(ClothManager, self).filter(???)
用例
- 如果<$,则返回
qs
c $ c> only_me == false - 如果
only_me =返回
和qs
= trueuser == self.request.user
(我们可以叫self.request.user $ c吗? $ c>是否在模型中?)
- 如果
only_me = true $ c $不要返回
qs
c>和user不是self.request.user
- returns
qs
ifonly_me==false
- returns
qs
ifonly_me==true
anduser==self.request.user
(Can we callself.request.user
in Model?) - DO NOT return
qs
ifonly_me=true
anduser is not self.request.user
我可以使用 Q
(如果需要)
I can use Q
if it's needed
推荐答案
您可以尝试:
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)
以及代码中的某个位置:
and somewhere in the code:
qs = YourModel.objects(request=request)
这篇关于过滤器中的多种逻辑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!