Django,如何创建具有特定编号的唯一编号

时间:2019-03-05 11:10:56

标签: python django

鉴于前两个是学生开始学习的年份,我想为个人资料创建唯一的5位数字(id_number)。例如,2019年入学的学生的ID必须在前两个中以19开头,其余三个数字为随机数。感谢所有解决方案

4 个答案:

答案 0 :(得分:0)

假设id_number是唯一的(在模型字段中为unique=True),则只需执行类似的操作

import random
from django.utils.timezone import now

# ...

year_part = now().year % 100
while True:
  id_number = '%02d%03d' % (year_part, random.randint(0, 999))
  if not Profile.objects.filter(id_number=id_number).exists():
    break
# assign the id_number to a profile...

请注意,当您在不幸的(1/999)情况下尝试IntegrityError模型时,这两个可能会因.save()而崩溃,两个并发请求都生成相同的id_number ,在这种情况下,您只需重试即可。

答案 1 :(得分:0)

import random
number=int('{}{}'.format(int(str(year)[-2:]),random.randint(100, 999)))

答案 2 :(得分:0)

根据您要使用的位置,尝试以下操作

import random
import datetime
def generate_id(year=None, digits=5):
    if not year:
        year=datetime.datetime.now().year
    year = str(year)
    digits = int(digits)
    data = str(random.randint(0,999)) + year[-2:]
    return data.zfill(digits)[-digits:]

请确保您输入的数字是5位

答案 3 :(得分:0)

import randint from random
def random_with_N_digits(n):  # generate OTP
    range_start = 10**(n - 1)
    range_end = (10**n) - 1
    return randint(range_start, range_end)