Как сделать автоинкремент уникального номера с префиксом?

Как увеличить номер счета-фактуры с префиксом "INV" и номером, который увеличивается '0001', '0002', '0003'...... и так далее....., когда пользователь создает счет-фактуру?

class Invoice(model.Models):
        clients_name = models.ForeignKey(Clients, on_delete=models.CASCADE, blank=True,null=True)
        invoice_number = invoice_number = models.CharField(max_length=200, blank=True, null=True)

после того, как пользователь создает/сохраняет форму счета, скрытое поле (поле счета) должно автоматически заполняться номером счета например. | клиент | счет-фактура| | -------- | -------- | | client_name1 | INV-001 | | client_name2 | INV-002 | | client_name4 | INV-003 | | | имя_клиента8 | INV-004 |

Вы можете выполнить этот процесс в методе сохранения модели:

class Invoice(model.Models):
        clients_name = models.ForeignKey(Clients, on_delete=models.CASCADE, blank=True,null=True)
        invoice_number = models.CharField(max_length=200, blank=True, null=True)

    def save(self):
        if not self.invoice_number and self.pk is None:
            last_invoice = Invoice.objects.all().order_by("-pk").first()
            last_pk = 0
            if last_invoice:
                last_pk = last_invoice.pk
        
            self.invoice_number = "INV-" + str(last_pk+1).zfill(3)

        super(Invoice, self).save()

Я использую первичный ключ для инкрементального числа, но вы можете использовать другое поле в модели для решения этой задачи.

Вернуться на верх