Django Q对象(立即使用或连接类型创建)
Django 1.10.1Django Q对象(立即使用或连接类型创建),django,Django,Django 1.10.1 from django.db.models import Q q = Q(title__icontains='r') print(q) >>> (AND: ('title__icontains', 'r')) 我刚刚在想,是否有可能创建相同的,但使用OR逻辑操作 我可以得到或像这样: for item in q_objects: query |= item 或者以其他方式(使用lamdba) 但我感觉不到这个问题。这个问题可能会帮助我更
from django.db.models import Q
q = Q(title__icontains='r')
print(q)
>>> (AND: ('title__icontains', 'r'))
我刚刚在想,是否有可能创建相同的,但使用OR逻辑操作
我可以得到或像这样:
for item in q_objects:
query |= item
或者以其他方式(使用lamdba)
但我感觉不到这个问题。这个问题可能会帮助我更好地理解它
换句话说,是否可以通过构造函数创建一个将显示(或:('title_uicontains','r'))的对象 哈奇:
>>> Q.default = Q.OR
>>> q = Q(title__icontains='r')
>>> q
<Q: (OR: ('title__icontains', 'r'))>
但是现在您有了Q
子类的一个实例。这真的不应该是个问题,但对于这些简单的对象来说,这实际上是不必要的。这里有一个更高级的方法:
>>> from django.db.models import Q
>>> q = Q.__new__(Q)
>>> q.default = Q.OR
>>> q.__init__(title__icontains='r')
>>> q
<Q: (OR: ('title__icontains', 'r'))>
>>> Q.default # existing Q instances are unaffected
u'AND'
>>来自django.db.models import Q
>>>q=q.。\uuuu新的\uuuuu(q)
>>>q.default=q.OR
>>>q.uuu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
>>>q
>>>Q.default#现有的Q实例不受影响
u'AND'
哈奇:
>>> Q.default = Q.OR
>>> q = Q(title__icontains='r')
>>> q
<Q: (OR: ('title__icontains', 'r'))>
但是现在您有了Q
子类的一个实例。这真的不应该是个问题,但对于这些简单的对象来说,这实际上是不必要的。这里有一个更高级的方法:
>>> from django.db.models import Q
>>> q = Q.__new__(Q)
>>> q.default = Q.OR
>>> q.__init__(title__icontains='r')
>>> q
<Q: (OR: ('title__icontains', 'r'))>
>>> Q.default # existing Q instances are unaffected
u'AND'
>>来自django.db.models import Q
>>>q=q.。\uuuu新的\uuuuu(q)
>>>q.default=q.OR
>>>q.uuu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
>>>q
>>>Q.default#现有的Q实例不受影响
u'AND'
@wim的答案太棒了!
只是一点补充:
为Q创建新对象似乎失败了,但您可以使用Q.default=Q或修改默认连接器
此外,您可以通过执行以下操作一次传递所有查询参数:
Model.objects.filter(Q(**query_dict))
# Make sure to use query dictionary taking note of the fact that simply using
# Double star operator would produce list values. You can do:
dictionary = dict(query_dict)
well_formed = {key: dictionary.get(key)[0] for key in dictionary.keys()}
result = Model.objects.filter(Q(**query_dict))
@维姆的答案太棒了!
只是一点补充:
为Q创建新对象似乎失败了,但您可以使用Q.default=Q或修改默认连接器
此外,您可以通过执行以下操作一次传递所有查询参数:
Model.objects.filter(Q(**query_dict))
# Make sure to use query dictionary taking note of the fact that simply using
# Double star operator would produce list values. You can do:
dictionary = dict(query_dict)
well_formed = {key: dictionary.get(key)[0] for key in dictionary.keys()}
result = Model.objects.filter(Q(**query_dict))
看起来很有希望。我必须消化。请给我点时间,看起来很有希望。我必须消化。请给我一些时间。