sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur förhindrar man rastillstånd i Django på INSERT med begränsande SUM?

Tack till @Alasdair för att du pekade mig i rätt riktning.

Efter att ha fyllt i fälten för inst (en ny Expense ), gör:

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

Observera att jag har total_cost definieras som en metod på Project :

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



  1. Hämta data från MySQL-databasen genom specifikt id i url

  2. Postgres 9.1 vs Mysql 5.6 InnoDB?

  3. Hur man tar bort den senaste posten (på villkor) från en tabell i MySql

  4. Släppbegränsning med specialtecken i Oracle