我看到了this answer但目前还没有具体的答案。我想创建以字母开头的自定义 id。当一条新记录进入数据库时,我想将 id 更改为 A00001,.... A00002,.... A00010,...A10000 等。id将始终在 99999- 00001 范围内,那么我该怎么做呢?
我的模型很简单:
class Custom(models.Model):
id = models.AutoField(primary_key=True, editable=False)
请您参考如下方法:
AutoField 字段是一种 IntegerField 字段,因此您不能将 PK 用作 A00001 .
因此,实现需求的可能方法是将AutoField更改为CharField。< br/>
从技术上讲,您可以使用“String PK Field”但是,如果您打算使用它,您应该意识到问题/性能问题。
在这里,我发现了一篇很好的 SO 帖子,它解释了相同的内容 - Strings as Primary Keys in SQL Database
========================================== ==============================
如果您仍然真的希望迁移到字符串 PK,请阅读以下内容
首先,您需要使用 CharField 而不是 AutoField 并覆盖 save() 模型方法
<b>from django.db.models import Max</b>
class Custom(models.Model):
id = models.<b>CharField</b>(primary_key=True, editable=False, max_length=10)
name = models.CharField(max_length=100)
<b>def save(self, **kwargs):
if not self.id:
max = Custom.objects.aggregate(id_max=Max('id'))['id_max']
self.id = "{}{:05d}".format('A', max if max is not None else 1)
super().save(*kwargs)</b>
