mirror of
https://github.com/django/django.git
synced 2025-04-01 03:56:42 +00:00
Fixed #36048 -- Preferred ValueError to NotSupportedError for composite pk sanity checks.
These checks are not backend-dependent.
This commit is contained in:
parent
51df0dff3c
commit
46b3e7dd8c
@ -3,7 +3,6 @@ Classes to represent the definitions of aggregate functions.
|
||||
"""
|
||||
|
||||
from django.core.exceptions import FieldError, FullResultSet
|
||||
from django.db import NotSupportedError
|
||||
from django.db.models.expressions import Case, ColPairs, Func, Star, Value, When
|
||||
from django.db.models.fields import IntegerField
|
||||
from django.db.models.functions import Coalesce
|
||||
@ -182,7 +181,7 @@ class Count(Aggregate):
|
||||
# In case of composite primary keys, count the first column.
|
||||
if isinstance(expr, ColPairs):
|
||||
if self.distinct:
|
||||
raise NotSupportedError(
|
||||
raise ValueError(
|
||||
"COUNT(DISTINCT) doesn't support composite primary keys"
|
||||
)
|
||||
|
||||
|
@ -1,4 +1,3 @@
|
||||
from django.db import NotSupportedError
|
||||
from django.db.models.expressions import ColPairs
|
||||
from django.db.models.fields import composite
|
||||
from django.db.models.fields.tuple_lookups import TupleIn, tuple_lookups
|
||||
@ -117,7 +116,7 @@ class RelatedLookupMixin:
|
||||
def as_sql(self, compiler, connection):
|
||||
if isinstance(self.lhs, ColPairs):
|
||||
if not self.rhs_is_direct_value():
|
||||
raise NotSupportedError(
|
||||
raise ValueError(
|
||||
f"'{self.lookup_name}' doesn't support multi-column subqueries."
|
||||
)
|
||||
self.rhs = get_normalized_value(self.rhs, self.lhs)
|
||||
|
@ -1,4 +1,3 @@
|
||||
from django.db import NotSupportedError
|
||||
from django.db.models import Count, Q
|
||||
from django.test import TestCase
|
||||
|
||||
@ -82,7 +81,7 @@ class CompositePKAggregateTests(TestCase):
|
||||
|
||||
def test_count_distinct_not_supported(self):
|
||||
with self.assertRaisesMessage(
|
||||
NotSupportedError, "COUNT(DISTINCT) doesn't support composite primary keys"
|
||||
ValueError, "COUNT(DISTINCT) doesn't support composite primary keys"
|
||||
):
|
||||
self.assertIsNone(
|
||||
User.objects.annotate(comments__count=Count("comments", distinct=True))
|
||||
|
@ -1,6 +1,5 @@
|
||||
import itertools
|
||||
|
||||
from django.db import NotSupportedError
|
||||
from django.db.models import F
|
||||
from django.db.models.fields.tuple_lookups import (
|
||||
TupleExact,
|
||||
@ -65,7 +64,7 @@ class TupleLookupsTests(TestCase):
|
||||
|
||||
def test_exact_subquery(self):
|
||||
with self.assertRaisesMessage(
|
||||
NotSupportedError, "'exact' doesn't support multi-column subqueries."
|
||||
ValueError, "'exact' doesn't support multi-column subqueries."
|
||||
):
|
||||
subquery = Customer.objects.filter(id=self.customer_1.id)[:1]
|
||||
self.assertSequenceEqual(
|
||||
@ -239,7 +238,7 @@ class TupleLookupsTests(TestCase):
|
||||
|
||||
def test_lt_subquery(self):
|
||||
with self.assertRaisesMessage(
|
||||
NotSupportedError, "'lt' doesn't support multi-column subqueries."
|
||||
ValueError, "'lt' doesn't support multi-column subqueries."
|
||||
):
|
||||
subquery = Customer.objects.filter(id=self.customer_1.id)[:1]
|
||||
self.assertSequenceEqual(
|
||||
@ -287,7 +286,7 @@ class TupleLookupsTests(TestCase):
|
||||
|
||||
def test_lte_subquery(self):
|
||||
with self.assertRaisesMessage(
|
||||
NotSupportedError, "'lte' doesn't support multi-column subqueries."
|
||||
ValueError, "'lte' doesn't support multi-column subqueries."
|
||||
):
|
||||
subquery = Customer.objects.filter(id=self.customer_1.id)[:1]
|
||||
self.assertSequenceEqual(
|
||||
@ -327,7 +326,7 @@ class TupleLookupsTests(TestCase):
|
||||
|
||||
def test_gt_subquery(self):
|
||||
with self.assertRaisesMessage(
|
||||
NotSupportedError, "'gt' doesn't support multi-column subqueries."
|
||||
ValueError, "'gt' doesn't support multi-column subqueries."
|
||||
):
|
||||
subquery = Customer.objects.filter(id=self.customer_1.id)[:1]
|
||||
self.assertSequenceEqual(
|
||||
@ -375,7 +374,7 @@ class TupleLookupsTests(TestCase):
|
||||
|
||||
def test_gte_subquery(self):
|
||||
with self.assertRaisesMessage(
|
||||
NotSupportedError, "'gte' doesn't support multi-column subqueries."
|
||||
ValueError, "'gte' doesn't support multi-column subqueries."
|
||||
):
|
||||
subquery = Customer.objects.filter(id=self.customer_1.id)[:1]
|
||||
self.assertSequenceEqual(
|
||||
@ -419,7 +418,7 @@ class TupleLookupsTests(TestCase):
|
||||
|
||||
def test_isnull_subquery(self):
|
||||
with self.assertRaisesMessage(
|
||||
NotSupportedError, "'isnull' doesn't support multi-column subqueries."
|
||||
ValueError, "'isnull' doesn't support multi-column subqueries."
|
||||
):
|
||||
subquery = Customer.objects.filter(id=0)[:1]
|
||||
self.assertSequenceEqual(
|
||||
|
Loading…
x
Reference in New Issue
Block a user