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
|
||||
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)
|
||||
if self.query.can_filter() and not self.query.distinct_fields:
|
||||
clone = clone.order_by()
|
||||
|
|
|
@ -341,3 +341,16 @@ class QuerySetSetOperationTests(TestCase):
|
|||
msg % (operation, combinator),
|
||||
):
|
||||
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