在 Django 中为模型创建一个 ID 计数器

Make an ID counter for a model in django

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

    def __str__(self):

    return "Job #" + str(id) 

这(以及所有其他涉及编写函数的尝试)只是 return 像这样:

  Job #<built-in function id>

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

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

如果您因此在函数中使用 id,并且您没有声明名为 id 的局部变量(或更局部范围内的变量)。查找名称 id 将产生此函数。

但是你在这里想要的是对象的 idself 对象。所以你需要使用 self.id 代替:

def __str__(self):
    return "Job #" + str(<b>self.</b>id)

或更清晰的格式:

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

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

def __str__(self):
    return "Job #{}".format(self.<b>pk</b>)

关于启动主键,有一些问题(有答案),比如 and this。但关键是,这些通常是自动递增字段,用于分配 id 的序列通常取决于数据库。因此,没有直接的方法来解决这个问题,因为一些数据库系统在启动时会计算分配的 id 的最大值,然后每次都分配下一个。尽管存在一些解决方案,但这些解决方案通常不是 通用的 ,并且另一个数据库后端的工作方式可能不同。