在 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
将产生此函数。
但是你在这里想要的是对象的 id
:self
对象。所以你需要使用 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
的最大值,然后每次都分配下一个。尽管存在一些解决方案,但这些解决方案通常不是 通用的 ,并且另一个数据库后端的工作方式可能不同。
我想在 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
将产生此函数。
但是你在这里想要的是对象的 id
:self
对象。所以你需要使用 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>)
关于启动主键,有一些问题(有答案),比如id
的最大值,然后每次都分配下一个。尽管存在一些解决方案,但这些解决方案通常不是 通用的 ,并且另一个数据库后端的工作方式可能不同。