0

i have code like this:

class NumberSequence(models.Model):
    code = models.CharField(max_length=12)
    prefix = models.CharField(max_length=3, verbose_name='Prefix')
    length = models.IntegerField(verbose_name='Digit Length')
    last = models.IntegerField(verbose_name='Last Number Used')

def getNumberSequence():
    ns = NumberSequence.objects.filter(code='REQ')
    letter =  ns[0].prefix
    lastNumber = ns[0].last+1
    formatedNS = '{0}-{1:0'+str(ns[0].length)+'d}'
    NumberSequence.objects.filter(code='REQ').update(last=lastNumber)
    return formatedNS.format(letter,lastNumber)

class Requisitions(models.Model):
    number = models.CharField(max_length=20, default=getNumberSequence)

but when I created new record in Requisition, the last number in NumberSequence updated to lastNumber+2.

example : last = 1. When i created new record, last updated to 3. The last should be updated to 2.

What's wrong with my code? Thanks

Pams
  • 25
  • 3
  • Are you sure you have exactly 1 row in your `NumberSequence` table? I suggest you to set `unique=True` in your `code` field to make sure. Also avoid implementing your own sequences as you will go into a race condition when two processes simultaneously ask for a sequence. Consider using an `AutoField` instead. – Selcuk Jul 31 '17 at 03:46
  • i need to create my own sequence number format. such as "PO-001" for Purhase Order, "REQ-001" for Requisition, etc SequenceNumber table is for controlling the format of my own sequence number – Pams Jul 31 '17 at 04:07

0 Answers0