1
0
mirror of https://github.com/django/django.git synced 2025-03-12 18:30:48 +00:00

Fixed #36222 -- Fixed ExclusionConstraint validation crash on excluded fields in condition.

Signed-off-by: saJaeHyukc <wogur981208@gmail.com>
This commit is contained in:
saJaeHyukc 2025-03-10 22:55:05 +09:00 committed by Mariusz Felisiak
parent e44e8327d3
commit c1257350ca
3 changed files with 17 additions and 0 deletions

View File

@ -455,6 +455,7 @@ answer newbie questions, and generally made Django that much better:
Jacob Kaplan-Moss <jacob@jacobian.org>
Jacob Rief <jacob.rief@gmail.com>
Jacob Walls <http://www.jacobtylerwalls.com/>
JaeHyuck Sa <wogur981208@gmail.com>
Jakub Bagiński <https://github.com/Jacob1507>
Jakub Paczkowski <jakub@paczkowski.eu>
Jakub Wilk <jwilk@jwilk.net>

View File

@ -206,6 +206,11 @@ class ExclusionConstraint(BaseConstraint):
self.get_violation_error_message(), code=self.violation_error_code
)
else:
# Ignore constraints with excluded fields in condition.
if exclude and self._expression_refs_exclude(
model, self.condition, exclude
):
return
if (self.condition & Exists(queryset.filter(self.condition))).check(
replacement_map, using=using
):

View File

@ -797,6 +797,17 @@ class ExclusionConstraintTests(PostgreSQLTestCase):
),
exclude={"datespan", "start", "end", "room"},
)
# Constraints with excluded fields in condition are ignored.
constraint.validate(
HotelReservation,
HotelReservation(
datespan=(datetimes[1].date(), datetimes[2].date()),
start=datetimes[1],
end=datetimes[2],
room=room102,
),
exclude={"cancelled"},
)
def test_range_overlaps_custom(self):
class TsTzRange(Func):