Python 如何获取通常以Django递增的字段的默认值?

Python 如何获取通常以Django递增的字段的默认值?,python,django,models,Python,Django,Models,我正在写一个小的会计软件。一个功能是创建账单。这些账单有一个序列号,应该随着每张账单的增加而增加。但有时我需要在这个系统之外创建一个,所以我需要能够更改值。因此,我要寻找的是一种在Django admin中使用默认值的整型字段的方法,它总是最大值+1,但可以编辑。不幸的是,我不知道从哪里开始。如何执行此操作?您可以使用函数或lambda表达式作为默认值: class Bill(models.Model): serial = models.IntegerField(default=lamb

我正在写一个小的会计软件。一个功能是创建账单。这些账单有一个序列号,应该随着每张账单的增加而增加。但有时我需要在这个系统之外创建一个,所以我需要能够更改值。因此,我要寻找的是一种在Django admin中使用默认值的整型字段的方法,它总是最大值+1,但可以编辑。不幸的是,我不知道从哪里开始。如何执行此操作?

您可以使用函数或lambda表达式作为默认值:

class Bill(models.Model):
    serial = models.IntegerField(default=lambda: Bill.objects.latest('id').serial + 1)
    # ...
基本上,获取最新的模型,并使用其序列号(加上一个)作为默认值。如果您的序列号是整数,这将起作用,否则您必须使用自己的逻辑。还请注意,如果数据库中没有任何账单,则会引发DoesNotExist。

您可以始终使用。如该链接所示,数据库将自动为您递增,但您仍然可以显式地设置自己的值


请参阅下面几行的部分,该部分称为明确指定自动主键值

,这很完美。我真的试过了,但是没有lambda。我会仔细阅读的。非常感谢。谢谢但是,如果我正确地使用这种方法,那么在Django管理员中它将不会帮助我,是吗?但如果我写过自己的后端,知道这一点很好。老实说,我不确定这在管理中是如何出现的。这种方法的好处是,数据库本身处理下一个ID的生成,并且不需要每次创建对象时都查询对象。据我所知,它隐藏了admin中的字段!