Я занимаюсь разработкой биллинговой / банковской системы.Есть 2 модели счета и транзакции.При создании транзакции я хочу проверить сумму транзакции <остаток на счете.Я использую django-admin и DRF.В обоих случаях пользователь должен видеть сообщения об ошибках валидации.В текущей реализации пользователь видит код ответа 500. Есть ли лучший способ проверки транзакции после блокировки строк? </p>
class Account(models.Model):
balance = models.DecimalField(max_digits=10, decimal_places=2, default=0)
datetime = models.DateTimeField(auto_now=True)
class Transaction(models.Model):
src = models.ForeignKey(Account, on_delete=models.CASCADE, related_name="out_transactions")
dst = models.ForeignKey(Account, on_delete=models.CASCADE, related_name="in_transactions")
amount = models.DecimalField(max_digits=10, decimal_places=2)
datetime = models.DateTimeField(auto_now_add=True)
def save(self, *args, **kwargs):
with transaction.atomic():
Account.objects.select_for_update().filter(pk__in=[self.src.id, self.dst.id])
if self.src.balance < self.amount:
raise ValueError('Not enough balance')
self.src.balance -= self.amount
self.dst.balance += self.amount
self.src.save()
self.dst.save()
super().save(*args, **kwargs)