PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana mencegah kondisi balapan di Django pada INSERT dengan membatasi SUM?

Terima kasih kepada @Alasdair karena telah mengarahkan saya ke arah yang benar.

Setelah mengisi kolom inst (Expense baru ), lakukan:

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

Perhatikan bahwa saya memiliki total_cost didefinisikan sebagai metode pada 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. Dua titik dua (::) notasi dalam SQL

  2. Dapatkan hasil yang tepat untuk pembagian bilangan

  3. Bagaimana cara menghapus tanda kutip tunggal dari tabel di postgresql?

  4. Postgres Insert Into View Rule dengan Returning Clause

  5. Bagaimana cara mengambil komentar dari database PostgreSQL?