如何获得通常在Django中递增的字段的默认值?

时间:2013-08-30 21:43:04

标签: python django models

我正在为会计编写一小块软件。一个功能是创建账单。这些账单的序列号应该随每张账单递增。但有时我需要在这个系统之外创建一个,所以我需要能够改变它的价值。所以我正在寻找的是一种在Django admin中具有默认值的整数字段的方法,它始终是最大值+ 1,但是可以编辑。不幸的是我不知道从哪里开始。我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

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

class Bill(models.Model):
    serial = models.IntegerField(default=lambda: Bill.objects.latest('id').serial + 1)
    # ...

基本上,抓住最新型号,并使用其序列号(加一)作为默认值。如果你的序列是一个整数,这将有效,否则你将不得不使用自己的逻辑。另请注意,如果您的数据库中没有任何账单,.latest()将引发DoesNotExist。

答案 1 :(得分:1)

您可以随时使用AutoField。如该链接所示,数据库将自动为您增加,但您仍然可以明确设置自己的数据。

请参阅以下几行,称为明确指定自动主键值