在Django中为模型制作ID计数器

时间:2018-07-16 16:58:21

标签: django model counter id

我想为Django中的模型制作一个简单的ID计数器。我希望它从1000开始而不是0,所以我想最好不要使用built in id function,因为我在这里尝试这样做:

    def __str__(self):

    return "Job #" + str(id) 

这(以及涉及编写函数的所有其他尝试)仅返回如下内容:

  Job #<built-in function id>

也许以某种方式使用for循环会更容易吗?

1 个答案:

答案 0 :(得分:1)

Python有一个名为id [Python-doc] builtin 函数。它为给定对象计算一个数字,该数字在对象的整个生命周期内保持不变,并且 unique 也是如此。

因此,如果您在函数中使用id,而没有声明名为id的局部变量(或更局部范围的变量)。名称id的查找将导致此功能。

但是您在这里想要的是对象的idself对象。因此,您需要改用self.id

def __str__(self):
    return "Job #" + str(self.id)

或更干净的格式:

def __str__(self):
    return "Job #{}".format(self.id)

由于不能保证模型具有id列(因为可以定义另一个主键),因此使用.pk可能更安全:

def __str__(self):
    return "Job #{}".format(self.pk)

关于启动主键,对此有一些疑问(包括答案​​),例如thisthis。但要注意的是,这些通常是自动递增的字段,并且用于分配ID的序列通常与数据库有关。结果,没有直接的方法来解决此问题,因为某些数据库系统在启动时会计算分配的id中的最大值,然后每次分配下一个。尽管存在一些解决方案,但这些解决方案通常不是 generic ,并且另一个数据库后端可能会有所不同。