2017-07-29 1 views
0

J'ai trouvé un problème lorsque j'ai essayé de mettre à jour plusieurs objets dans mes modèles. voici mes modèles:Django Mise à jour de plusieurs objets erreur

class NumberSequence(models.Model): 
    code = models.CharField(max_length=12) 
    name = models.CharField(max_length=60) 
    prefix = models.CharField(max_length=3) 
    length = models.IntegerField() 
    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 
    l = '{0}-{1:0'+str(ns[0].length)+'d}' 

    for num in ns: 
     num.last = lastNumber 
     num.save() 

    return l.format(letter,lastNumber+1) 


class Requisitions(models.Model): 
    number = models.CharField(max_length=20, default=getNumberSequence()) 
    transDate = models.DateField(verbose_name='Date') 
    businessUnit = models.ForeignKey(BusinessUnit, verbose_name='Unit') 
    division = models.ForeignKey(Division, verbose_name='Division') 
    remarks = models.TextField 
    status = models.IntegerField(verbose_name='Status') 

Lorsque je crée un nouvel enregistrement dans Requisition, la séquence de numéros de table ne se met pas à jour. mais si je redémarre le service, la table de séquence de numéros est mise à jour automatiquement. que s'est-il passé avec mon code? aucune suggestion, s'il vous plaît ..

+0

Afficher le code qui appelle votre mise à jour multiple, vous affichez uniquement la définition. –

Répondre

0

Vous ne devez pas appeler la fonction par défaut dans votre définition de champ, mais passez le callable uniquement sans parenthèses.

number = models.CharField(max_length=20, default=getNumberSequence) 
+0

merci @Daniel .. mais j'ai toujours une erreur dans mes modèles. Lorsque j'ai créé un nouvel enregistrement dans Requisitions, le numéro de séquence a été mis à jour + 2. Il doit être mis à jour + 1. – Pams

0

i changé le modèle comme celui-ci:

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

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

mais quand j'ai créé nouveau record, le dernier numéro mis à jour à lastNumber + 2.

exemple: lastNumber = 1. Lorsque j'ai créé nouveau record, lastNumber mis à jour 3. Le lastNumber doit être mis à jour 2.

Quel est le problème avec mon code?