Skip to main content
 首页 » 编程设计

python之Django 生成自定义 ID

2025年05月04日29Terrylee

我看到了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>