From cc8b4510a2c596d126f7e8946cff789b7f84f027 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Wed, 14 Jun 2017 17:02:53 +0200 Subject: [PATCH] QuerySetWrapper.exclude() --- src/c3nav/editor/wrappers.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/c3nav/editor/wrappers.py b/src/c3nav/editor/wrappers.py index cc67578c..dfd061a2 100644 --- a/src/c3nav/editor/wrappers.py +++ b/src/c3nav/editor/wrappers.py @@ -1,5 +1,6 @@ import typing from collections import deque +from itertools import chain from django.db import models from django.db.models import Manager, Prefetch, Q @@ -270,11 +271,17 @@ class BaseQueryWrapper(BaseWrapper): result.negated = q.negated return result + def _filter(self, *args, **kwargs): + return chain( + tuple(self._filter_q(q) for q in args), + tuple(self._filter_kwarg(name, value) for name, value in kwargs.items()) + ) + def filter(self, *args, **kwargs): - return self._wrap_queryset(self.get_queryset().filter( - *tuple(self._filter_q(q) for q in args), - *tuple(self._filter_kwarg(name, value) for name, value in kwargs.items()), - )) + return self._wrap_queryset(self.get_queryset().filter(*self._filter(*args, **kwargs))) + + def exclude(self, *args, **kwargs): + return self._wrap_queryset(self.get_queryset().exclude(*self._filter(*args, **kwargs))) def count(self): return self.get_queryset().count()