Signed-off-by: saJaeHyukc <wogur981208@gmail.com>
@@ -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>
@@ -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
):
@@ -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):