Как я могу заставить модуль get_random_string Django возвращать только числовые значения?

#python #django #random

Вопрос:

Что я должен сделать с моим простым кодом ниже, чтобы он возвращал только числовые значения?

 >>> from django.utils.crypto import get_random_string
>>> get_random_string(10)
>>> 'PhaWT9X02U'
 

Что-то вроде: 1067603657
И если это возможно, можете ли вы порекомендовать поле идентификатора, сгенерированное таким образом?

Ответ №1:

Добавить allowed_chars

 get_random_string(10, allowed_chars='0123456789')
 

И использовать в качестве идентификатора:

 def random_id():
   random_str = get_random_string(10, allowed_chars='0123456789')
   return int(random_str)
 

И добавьте поле идентификатора в свою модель вот так:

 id = models.IntegerField(primary_key=True, default=random_id, editable=False)
 

Комментарии:

1. Большое спасибо @Reza Heydari, так что можете ли вы рекомендовать этот метод в качестве способа создания идентификатора с primary_key=True, гарантирующего очень малую вероятность возврата дубликата?

2. Нет никакой гарантии, что функция не вернет дубликат, но я думаю, что django пытается добавить уникальное значение для id.