gpt4 book ai didi

django - 如何在 Django 中创建自定义 ID?

转载 作者:行者123 更新时间:2023-12-02 19:24:35 29 4
gpt4 key购买 nike

据我所知,我们可以使用 UUIDField() 创建自定义 ID。

id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

但是我怎样才能更改看起来像 AAYYMMDDNNNN

的 ID

在哪里,

⦁ 前 2 个字符 - 'AA'

⦁ YY - 捕获其注册的年份

⦁ MM - 捕获其注册的月份

⦁ DD - 捕获其注册的当前日期

⦁ NNNN - 基于每天新的一组 NNNN 生成的随机数 (0001 - 9999)

最佳答案

你可以这样尝试:

import random
from django.utils import timezone

def generate_pk():
number = random.randint(1000, 9999)
return 'AA{}{}'.format(timezone.now().strftime('%y%m%d'), number)

class YourModel(models.Model):
id = models.CharField(default=generate_pk, primary_key=True, max_length=255, unique=True)

更新

根据评论更新,因为你想跟踪今天是否有任何实例创建并增加NNNN的计数器,你不能使用函数来生成默认值。而是尝试像这样重写保存方法:

import random
from django.utils import timezone

class YourModel(models.Model):
special_id = models.CharField(max_length=255, null=True, default=None)

def save(self,*args, **kwargs):
if not self.special_id:
prefix = 'AA{}'.format(timezone.now().strftime('%y%m%d')
prev_instances = self.__class__.objects.filter(special_id__contains=prefix))
if prev_instances.exists():
last_instance_id = prev_instances.last().special_id[-4:]
self.special_id = prefix+'{0:04d}'.format(int(last_instance_id)+1)
else:
self.special_id = prefix+'{0:04d}'.format(1)
super(YourModel, self).save(*args, **kwargs)

关于django - 如何在 Django 中创建自定义 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62588857/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com