class Invoice(models.Model):
invoice_number = models.PositiveIntegerField()
organization = models.ForeignKey('Organization')
def save(self, **kwargs):
last = (
Invoice.objects.filter(organization=self.organization)
.values("invoice_number")
.order_by("invoice_number")
.last()
)
next_number = last["invoice_number"] + 1
self.invoice_number = next_number
в ней в методе save несложная логика заплонения поля invoice_number - просто берется для огранизации последний инвойс, смотрим его номер добавляем +1.
Но вот проблема что когда я начал создавать инвойсы паралельно в селери таске, то начали дублироваться invoice_number так как инвойсы создаются параельно и не успевает бд обновиться что бы сформировать следующий номер. Подскажите как это дело поправить правльно?
проверять invoice_number перед самим созданием, может помогут сигналы
В бд есть sequence. Создай его и запрашивай при save()
Обсуждают сегодня