From 5f40d7024d2b0d7cd400f9591cef484cf91325ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Thu, 15 Jun 2017 00:53:40 +0200 Subject: [PATCH] more WrappedQuerySet filter features --- src/c3nav/editor/wrappers.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/c3nav/editor/wrappers.py b/src/c3nav/editor/wrappers.py index 6182c3d8..c6870eb5 100644 --- a/src/c3nav/editor/wrappers.py +++ b/src/c3nav/editor/wrappers.py @@ -287,9 +287,15 @@ class BaseQueryWrapper(BaseWrapper): q = Q(**{filter_name: filter_value}) + if field_name == 'pk': + return q + if isinstance(class_value, ForwardManyToOneDescriptor): if not segments: - raise NotImplementedError + filter_name = field_name + '__pk' + filter_value = filter_value.pk + segments = ['pk'] + q = Q(**{filter_name: filter_value}) filter_type = segments.pop(0) @@ -306,9 +312,24 @@ class BaseQueryWrapper(BaseWrapper): if segments: raise NotImplementedError + if filter_type == 'pk': + return self._filter_values(q, field_name, lambda val: val == filter_value) + if filter_type == 'isnull': return self._filter_values(q, field_name, lambda val: (val is None) is filter_value) + if isinstance(class_value, DeferredAttribute): + if not segments: + raise NotImplementedError + + filter_type = segments.pop(0) + + if segments: + raise NotImplementedError + + if filter_type == 'lt': + return self._filter_values(q, field_name, lambda val: val < filter_value) + raise NotImplementedError('cannot filter %s by %s (%s)' % (self._obj.model, filter_name, class_value)) if isinstance(filter_value, ModelInstanceWrapper):