always use get_operator, avoid case-insensitive match if possible

This commit is contained in:
j 2016-06-29 23:58:29 +02:00
commit e9863c238e
24 changed files with 289 additions and 370 deletions

View file

@ -1,17 +1,22 @@
# -*- coding: utf-8 -*-
# vi:si:et:sw=4:sts=4:ts=4
from django.db.models import Q, Manager
from oxdjango.query import QuerySet
from django.conf import settings
from oxdjango.managers import get_operator
from oxdjango.query import QuerySet
keymap = {
'email': 'user__email',
'user': 'username',
'group': 'user__groups__name',
'groups': 'user__groups__name',
}
default_key = 'username'
def parseCondition(condition, user):
k = condition.get('key', 'name')
k = {
'email': 'user__email',
'user': 'username',
'group': 'user__groups__name',
'groups': 'user__groups__name',
}.get(k, k)
k = condition.get('key', default_key)
k = keymap.get(k, k)
v = condition['value']
op = condition.get('operator')
if not op:
@ -28,18 +33,9 @@ def parseCondition(condition, user):
v = levels.index(v) - 1
else:
v = 0
key = '%s%s' % (k, {
'==': '__exact',
'<': '__lt',
'>': '__gt',
}.get(op,''))
key = k + get_operator(op, 'int')
else:
key = '%s%s' % (k, {
'==': '__iexact',
'^': '__istartswith',
'$': '__iendswith',
}.get(op,'__icontains'))
key = k + get_operator(op, 'istr')
key = str(key)
q = Q(**{key: v})