Найти - Пользователи
Полная версия: randint в Models
Начало » Django » randint в Models
1
helm2004
Доброго времени суток!
Джанга 1.6, Пайтон 3.4.

def generate_code():
    return random.randint(1000, 1000000000)
class NewIp(models.Model):
    code = models.CharField(max_length=50, null=True,  verbose_name='Код для входа', default = generate_code)

Проблема в том, что generate_code кешируется, то есть за один промежуток времени одни и те же цифры. Как сделать, что б они были разными?
Спасибо за ответы!
FishHook
helm2004
Проблема в том, что generate_code кешируется
Да не кешируется он. code по отношению к классу NewIp - атрибут класса, эта переменная определяется один раз при создании класса. Это, если мои подозрения верны и вы ошиблись при копировании сюда кода (нет скобок после вызова функции). А решение простое -переопределите save у модели, у при сохранении задавайте значение вызовом функции, если у инстанса оно is None.
helm2004
Цифры все равно одинаковые по code видно.

Делал так:
def save(self, *args, **kwargs):
        if self is None:
            self.code = random.randint(1000, 1000000000)
FishHook
helm2004
if self is None:
self никогда не может стать None. Здесь ошибка или когда набирал ошибся?
Ну и глупый вопрос, функция прям в таком виде в коде, т.е без вызова супер?
helm2004
Убрал говнокод.
def save(self, *args, **kwargs):
            self.code = random.randint(1000, 1000000000)
То же самое.
FishHook
Ну а супер где? Так же ничего не сохранится.
helm2004
Добави супер - нифига. Я уже в отчаяньи.
FishHook
helm2004
Добави супер - нифига.
покажите код модели полностью, добавьте принтов после каждой строки, что-то у вас не выполняется как надо, а чудес не бывает.
helm2004
Проапгрейдил на версию 1.8 - заработало. Спасибо за ответы!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB