Предполагая, что 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, и в этом случае вы можете просто повторить попытку.