2017-07-29 67 views
0

我发现了一些问题,当我尝试在我的模型更新多个对象。这里是我的模型:Django的更新多个对象错误

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

当我在申请中创建新记录时,表号序列不会更新。但如果我重新启动服务,数字序列表会自动更新。 发生了什么我的代码? 任何建议,请..

+0

显示该呼叫的多个更新的代码,你只显示清晰度。 –

回答

0

你不应该调用在你的领域定义的默认功能,但通过赎回只有不带括号。

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

感谢@Daniel ..但我仍然在我的模型误差。当我在申请创造了新的纪录,序列号更新+ 2应该更新+ 1。 – Pams

0

我改变了模式是这样的:

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) 

但是当我创造了新的纪录,最后的数字更新为lastNumber + 2。

例如:lastNumber = 1。当我创造了新的纪录,lastNumber更新3. lastNumber应更新为2

这有什么错我的代码?