Fixed #32068 -- Added error messages on get() with filters following union(), intersection(), and difference().
This commit is contained in:
parent
7cfa40d872
commit
981a3426cf
|
@ -416,6 +416,11 @@ class QuerySet:
|
||||||
Perform the query and return a single object matching the given
|
Perform the query and return a single object matching the given
|
||||||
keyword arguments.
|
keyword arguments.
|
||||||
"""
|
"""
|
||||||
|
if self.query.combinator and (args or kwargs):
|
||||||
|
raise NotSupportedError(
|
||||||
|
'Calling QuerySet.get(...) with filters after %s() is not '
|
||||||
|
'supported.' % self.query.combinator
|
||||||
|
)
|
||||||
clone = self._chain() if self.query.combinator else self.filter(*args, **kwargs)
|
clone = self._chain() if self.query.combinator else self.filter(*args, **kwargs)
|
||||||
if self.query.can_filter() and not self.query.distinct_fields:
|
if self.query.can_filter() and not self.query.distinct_fields:
|
||||||
clone = clone.order_by()
|
clone = clone.order_by()
|
||||||
|
|
|
@ -341,3 +341,16 @@ class QuerySetSetOperationTests(TestCase):
|
||||||
msg % (operation, combinator),
|
msg % (operation, combinator),
|
||||||
):
|
):
|
||||||
getattr(getattr(qs, combinator)(qs), operation)()
|
getattr(getattr(qs, combinator)(qs), operation)()
|
||||||
|
|
||||||
|
def test_get_with_filters_unsupported_on_combined_qs(self):
|
||||||
|
qs = Number.objects.all()
|
||||||
|
msg = 'Calling QuerySet.get(...) with filters after %s() is not supported.'
|
||||||
|
combinators = ['union']
|
||||||
|
if connection.features.supports_select_difference:
|
||||||
|
combinators.append('difference')
|
||||||
|
if connection.features.supports_select_intersection:
|
||||||
|
combinators.append('intersection')
|
||||||
|
for combinator in combinators:
|
||||||
|
with self.subTest(combinator=combinator):
|
||||||
|
with self.assertRaisesMessage(NotSupportedError, msg % combinator):
|
||||||
|
getattr(qs, combinator)(qs).get(num=2)
|
||||||
|
|
Loading…
Reference in New Issue