作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
据我所知,我们可以使用 UUIDField() 创建自定义 ID。
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
但是我怎样才能更改看起来像 AAYYMMDDNNNN
在哪里,
⦁ 前 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/
我是一名优秀的程序员,十分优秀!