Concurrency fix 4: database constraints (UniqueConstraint and CheckConstraint)
How can database constraints protect against concurrency problems?
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 |