summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
Diffstat (limited to 'django')
-rw-r--r--django/db/models/expressions.py2
-rw-r--r--django/db/models/lookups.py6
2 files changed, 7 insertions, 1 deletions
diff --git a/django/db/models/expressions.py b/django/db/models/expressions.py
index 667e9f93c6..88c5596c17 100644
--- a/django/db/models/expressions.py
+++ b/django/db/models/expressions.py
@@ -758,6 +758,8 @@ class CombinedExpression(SQLiteNumericMixin, Expression):
rhs = self.rhs.resolve_expression(
query, allow_joins, reuse, summarize, for_save
)
+ if isinstance(lhs, ColPairs) or isinstance(rhs, ColPairs):
+ raise ValueError("CompositePrimaryKey is not combinable.")
if not isinstance(self, (DurationExpression, TemporalSubtraction)):
try:
lhs_type = lhs.output_field.get_internal_type()
diff --git a/django/db/models/lookups.py b/django/db/models/lookups.py
index 734f911f83..56dbdabac1 100644
--- a/django/db/models/lookups.py
+++ b/django/db/models/lookups.py
@@ -4,7 +4,7 @@ import warnings
from django.core.exceptions import EmptyResultSet, FullResultSet
from django.db.backends.base.operations import BaseDatabaseOperations
-from django.db.models.expressions import Case, Expression, Func, Value, When
+from django.db.models.expressions import Case, ColPairs, Expression, Func, Value, When
from django.db.models.fields import (
BooleanField,
CharField,
@@ -119,6 +119,10 @@ class Lookup(Expression):
value = value.resolve_expression(compiler.query)
if hasattr(value, "as_sql"):
sql, params = compiler.compile(value)
+ if isinstance(value, ColPairs):
+ raise ValueError(
+ "CompositePrimaryKey cannot be used as a lookup value."
+ )
# Ensure expression is wrapped in parentheses to respect operator
# precedence but avoid double wrapping as it can be misinterpreted
# on some backends (e.g. subqueries on SQLite).