From b2a0978610413e4cd5ebb716b8bfa7803dff8d5b Mon Sep 17 00:00:00 2001 From: David Wobrock Date: Wed, 29 Sep 2021 00:00:50 +0200 Subject: [4.0.x] Fixed #33018 -- Fixed annotations with empty queryset. Thanks Simon Charette for the review and implementation idea. Backport of dd1fa3a31b4680c0d3712e6ae122b878138580c7 from main --- django/db/models/sql/compiler.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'django/db/models/sql/compiler.py') diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py index 97288c83d7..d1009847e7 100644 --- a/django/db/models/sql/compiler.py +++ b/django/db/models/sql/compiler.py @@ -266,8 +266,12 @@ class SQLCompiler: try: sql, params = self.compile(col) except EmptyResultSet: - # Select a predicate that's always False. - sql, params = '0', () + empty_result_set_value = getattr(col, 'empty_result_set_value', NotImplemented) + if empty_result_set_value is NotImplemented: + # Select a predicate that's always False. + sql, params = '0', () + else: + sql, params = self.compile(Value(empty_result_set_value)) else: sql, params = col.select_format(self, sql, params) ret.append((col, (sql, params), alias)) -- cgit v1.3