Джанго, как создать уникальный номер с конкретным номером - PullRequest
0 голосов
/ 05 марта 2019

Я хотел бы создать уникальное пятизначное число (id_number) для профиля, учитывая, что первые два года - это год, когда студенты начинают учиться. Например, студенты, обучающиеся в 2019 году, должны иметь идентификатор, начинающийся с 19 в первых двух, и случайное число для трех других цифр. Спасибо за все решения

Ответы [ 4 ]

0 голосов
/ 05 марта 2019
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)
0 голосов
/ 05 марта 2019
import random
number=int('{}{}'.format(int(str(year)[-2:]),random.randint(100, 999)))
0 голосов
/ 05 марта 2019

В зависимости от того, где вы хотите его использовать, попробуйте следующее

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 цифр

0 голосов
/ 05 марта 2019

Предполагая, что 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...

Обратите внимание, что это может завершиться с IntegrityErrorпри попытке .save() модели в неудачном (1/999) случае два одновременных запроса генерируют один и тот же идентификатор id_number, и в этом случае вы можете просто повторить попытку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...