django使用Q来实现动态可变条件的或查询

 

from django.db.models import Q

1.固定条件的或查询
>>> User.objects.filter(Q(is_staff=True) | Q(username='123'))
[<User: staff_a>, <User: 123>, <User: staff_b>]

2.对于动态可变条件的或查询
代码示例:
>>> di = {'username': '123', 'is_staff': True} # 条件不固定
>>> q = Q()
>>> for i in di:
... q.add(Q(**{i: di[i]}), Q.OR)
...
<django.db.models.query_utils.Q object at 0x103a84bd0>
<django.db.models.query_utils.Q object at 0x103af1110>
>>> print q
(OR: (AND: ), (AND: ('username', '123')), ('is_staff', True))
>>> User.objects.filter(q)
[<User: staff_a>, <User: 123>, <User: staff_b>]

 

posted @ 2017-09-18 09:35  cls超  阅读(496)  评论(0)    收藏  举报