Concurrency fix 4: database constraints (UniqueConstraint and CheckConstraint)

Django Concurrency November 13, 2026 python

How can database constraints protect against concurrency problems?

python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# ======================================================================
# Q: How can database constraints protect against concurrency problems?
# ======================================================================

class Meta:
    constraints = [
        models.UniqueConstraint(fields=['coupon', 'user'], name='one_use_per_user'),
        models.CheckConstraint(condition=Q(stock__gte=0), name='stock_non_negative'),  # Django 5.1+
    ]

try:
    with transaction.atomic():
        CouponUse.objects.create(coupon=c, user=u)
except IntegrityError:
    ...  # already used