我想为我的模型添加一个自定义主键。以下是我目前的情况。

ticket_id = models.CharField(max_length=10, primary_key=True, editable=False)

我基本上希望每条记录的主键是这样的,从001开始自动递增。

AB001
AB002
AB003
AB004

我将如何实现这一目标?

1 个评论
所以你每次都要加AB,还是说有一部分是要生成钥匙的?
python
python-3.x
django
Ethan
Ethan
发布于 2020-09-14
2 个回答
Madjazz
Madjazz
发布于 2020-09-15
已采纳
0 人赞同

你可以覆盖保存方法,获得数据库中最后一个id条目,提取id-string的数字部分,并将其递增1。

def save(*args, **kwargs): if self.ticket_id is None: last_ticket_id = self.__class__.objects.all().order_by('ticket_id').last() if last_ticket_id is None: last_ticket_id = '000' last_ticket_id_number = ''.join(substr for substr in last_ticket_id if substr.isdigit()) leading_zeros = len(last_ticket_id_number) - 1 incremented_number = int(last_ticket_id_number) + 1 incremented_number = str(incremented_number).zfill(leading_zeros) self.ticket_id = f'AB{incremented_number}' super().save(*args, **kwargs)
谢谢你的回答,这正是我想要的效果。我只是在参数中加入了SELF。非常感谢您的帮助!
Ravishankar Sharma
Ravishankar Sharma
发布于 2020-09-15
0 人赞同

解决办法是设置一个自动递增的字段,如。