sql >> Databáze >  >> RDS >> PostgreSQL

Jak zabránit race condition v Django na INSERT s omezením SUM?

Děkuji @Alasdair za to, že mě ukázal správným směrem.

Po vyplnění polí inst (nový Expense ), proveďte:

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()

Všimněte si, že mám total_cost definovaná jako metoda v Project :

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



  1. MySQL spojte více řádků jako sloupce

  2. MySQL:SyntaxError:Neočekávaný identifikátor

  3. PostgreSQL:vytvoření vygenerovaného sloupce

  4. Vytvořte víceúrovňový JSON s PHP a MySQL