sql >> Database >  >> RDS >> PostgreSQL

Hoe raceconditie in Django op INSERT te voorkomen met het beperken van SUM?

Dank aan @Alasdair voor het wijzen in de goede richting.

Na het invullen van de velden van inst (een nieuwe Expense ), doe:

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

Merk op dat ik total_cost . heb gedefinieerd als een methode op Project :

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



  1. Zoeken in volledige tekst werkt niet als het stopwoord is opgenomen, ook al is de lijst met stopwoorden leeg

  2. Programmatisch databasestructuur maken en bijwerken

  3. Hoe vind je verschillende kolommen in een geneste subquery in SQL?

  4. Slechte tekens bij het afdrukken van tekst uit utf8_unicode_ci Mysql-tabel