mirror of
https://github.com/django/django.git
synced 2025-10-29 16:46:11 +00:00
Fixed #31783 -- Fixed crash when filtering againts "negate" field.
Thanks Simon Charette for the initial patch.
This commit is contained in:
committed by
Mariusz Felisiak
parent
b6dfdaff33
commit
9c9a3fe118
@@ -204,7 +204,7 @@ class QuerySet:
|
||||
def query(self):
|
||||
if self._deferred_filter:
|
||||
negate, args, kwargs = self._deferred_filter
|
||||
self._filter_or_exclude_inplace(negate, *args, **kwargs)
|
||||
self._filter_or_exclude_inplace(negate, args, kwargs)
|
||||
self._deferred_filter = None
|
||||
return self._query
|
||||
|
||||
@@ -939,7 +939,7 @@ class QuerySet:
|
||||
set.
|
||||
"""
|
||||
self._not_support_combined_queries('filter')
|
||||
return self._filter_or_exclude(False, *args, **kwargs)
|
||||
return self._filter_or_exclude(False, args, kwargs)
|
||||
|
||||
def exclude(self, *args, **kwargs):
|
||||
"""
|
||||
@@ -947,9 +947,9 @@ class QuerySet:
|
||||
set.
|
||||
"""
|
||||
self._not_support_combined_queries('exclude')
|
||||
return self._filter_or_exclude(True, *args, **kwargs)
|
||||
return self._filter_or_exclude(True, args, kwargs)
|
||||
|
||||
def _filter_or_exclude(self, negate, *args, **kwargs):
|
||||
def _filter_or_exclude(self, negate, args, kwargs):
|
||||
if args or kwargs:
|
||||
assert not self.query.is_sliced, \
|
||||
"Cannot filter a query once a slice has been taken."
|
||||
@@ -959,10 +959,10 @@ class QuerySet:
|
||||
self._defer_next_filter = False
|
||||
clone._deferred_filter = negate, args, kwargs
|
||||
else:
|
||||
clone._filter_or_exclude_inplace(negate, *args, **kwargs)
|
||||
clone._filter_or_exclude_inplace(negate, args, kwargs)
|
||||
return clone
|
||||
|
||||
def _filter_or_exclude_inplace(self, negate, *args, **kwargs):
|
||||
def _filter_or_exclude_inplace(self, negate, args, kwargs):
|
||||
if negate:
|
||||
self._query.add_q(~Q(*args, **kwargs))
|
||||
else:
|
||||
@@ -983,7 +983,7 @@ class QuerySet:
|
||||
clone.query.add_q(filter_obj)
|
||||
return clone
|
||||
else:
|
||||
return self._filter_or_exclude(False, **filter_obj)
|
||||
return self._filter_or_exclude(False, args=(), kwargs=filter_obj)
|
||||
|
||||
def _combinator_query(self, combinator, *other_qs, all=False):
|
||||
# Clone the query to inherit the select list and everything
|
||||
|
||||
Reference in New Issue
Block a user