如何将整数字段默认设置为最大数字+1?
How to set integer field default to max number +1?
我曾经这样设置整数字段的默认值。但是随着迁移,它不再起作用了。正确的做法是什么?
class Rechnung(models.Model):
nummer = models.IntegerField(default=lambda: Rechnung.objects.latest('id').nummer + 1)
[...]
您可以在模型保存方法中获取该值。为创建和更新保存运行,所以检查它是一个新对象,然后设置默认值,如果它是新的:
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)
请注意,您将可调用对象作为默认值提供,因此每次需要默认值时 django 都会调用它(就像之前版本中的 lambda)
我曾经这样设置整数字段的默认值。但是随着迁移,它不再起作用了。正确的做法是什么?
class Rechnung(models.Model):
nummer = models.IntegerField(default=lambda: Rechnung.objects.latest('id').nummer + 1)
[...]
您可以在模型保存方法中获取该值。为创建和更新保存运行,所以检查它是一个新对象,然后设置默认值,如果它是新的:
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)
请注意,您将可调用对象作为默认值提供,因此每次需要默认值时 django 都会调用它(就像之前版本中的 lambda)