如何将整数字段默认设置为最大数字+1?

时间:2016-02-17 18:34:57

标签: django django-models django-1.9

我曾经像这样设置整数字段的默认值。但随着迁移,它不再起作用了。这样做的正确方法是什么?

class Rechnung(models.Model):
  nummer = models.IntegerField(default=lambda: Rechnung.objects.latest('id').nummer + 1)
  [...]

1 个答案:

答案 0 :(得分:2)

您可以在模型保存方法中获取此值。保存运行以进行创建和更新,因此请检查它是否为新对象,然后设置默认值(如果是新对象):

class Rechnung(models.Model):
  nummer = models.IntegerField()

  def save(self,*args,**kwargs):
        if self.id != None:
           # new record
           self.nummer = Rechnung.objects.latest('id').nummer + 1)
           super(Rechnung,self).save(*args,**kwargs)

另一种方法是用自定义函数替换lambda:

def new_num():
   return Rechnung.objects.latest('id').nummer + 1)

class Rechnung(models.Model):
      nummer = models.IntegerField(default=new_num)

请注意,您将callable作为默认值提供,因此每次需要默认值时django都会调用它(如上一版本中的lambda)