PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak zapobiec sytuacji wyścigu w Django na INSERT z ograniczeniem SUMA?

Dzięki @Alasdair za wskazanie mi właściwego kierunku.

Po wypełnieniu pól inst (nowy Expense ), zrób:

with transaction.atomic():
    project = models.Project.objects.select_for_update().get(
        pk=project_id)
    cost = project.total_cost()
    budget = project.budget

    if cost + inst.cost > budget:
        raise forms.ValidationError(_('Over-budget'))

    self._inst.save()

Zauważ, że mam total_cost zdefiniowana jako metoda w Project :

class Project:
    def total_cost(self):
        return self.expense_set.all().aggregate(
            t=Sum(F('cost')))['t']



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Unikalne indeksy PostgreSQL i wielkość liter

  2. Jak zrobić aktualizację + dołączyć w PostgreSQL?

  3. Uzyskaj wszystkie klucze obce za pomocą JDBC

  4. Klucze obce JSON w PostgreSQL

  5. Jak połączyć się z bazą danych Postgres na platformie Docker w systemie Windows 10 za pomocą SQLAlchemy?