summaryrefslogtreecommitdiff
path: root/django/db/models/sql/query.py
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2019-03-08 02:06:34 -0500
committerTim Graham <timograham@gmail.com>2019-03-23 09:48:28 -0400
commitf19a4945e1191e1696f1ad8e6cdc6f939c702728 (patch)
tree05a6d32438d46c504ff933ab90c859d0a3087a8d /django/db/models/sql/query.py
parentcbf7e71558c94ce1c327b683768a18a25d82d197 (diff)
Fixed #21703 -- Fixed a crash when excluding a related field with a F().
Diffstat (limited to 'django/db/models/sql/query.py')
-rw-r--r--django/db/models/sql/query.py7
1 files changed, 6 insertions, 1 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index eac61106c6..4f2fe5acb5 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -21,7 +21,9 @@ from django.core.exceptions import (
from django.db import DEFAULT_DB_ALIAS, NotSupportedError, connections
from django.db.models.aggregates import Count
from django.db.models.constants import LOOKUP_SEP
-from django.db.models.expressions import BaseExpression, Col, F, Ref, SimpleCol
+from django.db.models.expressions import (
+ BaseExpression, Col, F, OuterRef, Ref, SimpleCol,
+)
from django.db.models.fields import Field
from django.db.models.fields.related_lookups import MultiColSource
from django.db.models.lookups import Lookup
@@ -1639,6 +1641,9 @@ class Query(BaseExpression):
saner null handling, and is easier for the backend's optimizer to
handle.
"""
+ filter_lhs, filter_rhs = filter_expr
+ if isinstance(filter_rhs, F):
+ filter_expr = (filter_lhs, OuterRef(filter_rhs.name))
# Generate the inner query.
query = Query(self.model)
query.add_filter(filter_expr)