From 9bab85e00a79bf07dc321f438bdafe7ac23ec852 Mon Sep 17 00:00:00 2001 From: j <0x006A@0x2620.org> Date: Sun, 3 Mar 2013 14:34:50 +0000 Subject: [PATCH] fix & queries with multiple item keys --- pandora/item/managers.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/pandora/item/managers.py b/pandora/item/managers.py index 20578da2..91e20d45 100644 --- a/pandora/item/managers.py +++ b/pandora/item/managers.py @@ -229,17 +229,20 @@ def parseConditions(conditions, operator, user): if 'conditions' in condition: q = parseConditions(condition['conditions'], condition.get('operator', '&'), user) - if q: + if isinstance(q, list): + conn += q + elif q: conn.append(q) else: conn.append(parseCondition(condition, user)) if conn: - q = conn[0] - for c in conn[1:]: - if operator == '|': + if operator == '|': + q = conn[0] + for c in conn[1:]: q = q | c - else: - q = q & c + q = [q] + else: + q = conn return q return Q() @@ -269,7 +272,8 @@ class ItemManager(Manager): conditions = parseConditions(data['query']['conditions'], data['query'].get('operator', '&'), user) - qs = qs.filter(conditions) + for c in conditions: + qs = qs.filter(c) else: qs = qs.filter(id__in=lqs[0].items.all()) return qs @@ -302,7 +306,9 @@ class ItemManager(Manager): conditions = parseConditions(data.get('query', {}).get('conditions', []), data.get('query', {}).get('operator', '&'), user) - qs = qs.filter(conditions) + for c in conditions: + qs = qs.filter(c) + #FIXME: can this be avoided? needed for grid/accessed/foo qs = qs.distinct()