Уведомления

Группа в Telegram: @pythonsu

#1 Март 14, 2016 16:30:03

helm2004
От: Украина, Винница
Зарегистрирован: 2008-02-27
Сообщения: 630
Репутация: +  9  -
Профиль   Отправить e-mail  

randint в Models

Доброго времени суток!
Джанга 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 кешируется, то есть за один промежуток времени одни и те же цифры. Как сделать, что б они были разными?
Спасибо за ответы!

Офлайн

#2 Март 14, 2016 17:06:58

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

randint в Models

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



Офлайн

#3 Март 15, 2016 12:07:28

helm2004
От: Украина, Винница
Зарегистрирован: 2008-02-27
Сообщения: 630
Репутация: +  9  -
Профиль   Отправить e-mail  

randint в Models

Цифры все равно одинаковые по code видно.

Делал так:

def save(self, *args, **kwargs):
        if self is None:
            self.code = random.randint(1000, 1000000000)

Прикреплённый файлы:
attachment Знімок екрана 2016-03-15 о 12.04.35.png (30,2 KБ)

Офлайн

#4 Март 15, 2016 13:01:43

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

randint в Models

helm2004
if self is None:
self никогда не может стать None. Здесь ошибка или когда набирал ошибся?
Ну и глупый вопрос, функция прям в таком виде в коде, т.е без вызова супер?



Отредактировано FishHook (Март 15, 2016 13:04:23)

Офлайн

#5 Март 15, 2016 15:59:03

helm2004
От: Украина, Винница
Зарегистрирован: 2008-02-27
Сообщения: 630
Репутация: +  9  -
Профиль   Отправить e-mail  

randint в Models

Убрал говнокод.

def save(self, *args, **kwargs):
            self.code = random.randint(1000, 1000000000)
То же самое.

Офлайн

#6 Март 15, 2016 16:12:08

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

randint в Models

Ну а супер где? Так же ничего не сохранится.



Офлайн

#7 Март 15, 2016 16:32:48

helm2004
От: Украина, Винница
Зарегистрирован: 2008-02-27
Сообщения: 630
Репутация: +  9  -
Профиль   Отправить e-mail  

randint в Models

Добави супер - нифига. Я уже в отчаяньи.

Офлайн

#8 Март 15, 2016 16:43:03

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

randint в Models

helm2004
Добави супер - нифига.
покажите код модели полностью, добавьте принтов после каждой строки, что-то у вас не выполняется как надо, а чудес не бывает.



Офлайн

#9 Март 16, 2016 09:57:01

helm2004
От: Украина, Винница
Зарегистрирован: 2008-02-27
Сообщения: 630
Репутация: +  9  -
Профиль   Отправить e-mail  

randint в Models

Проапгрейдил на версию 1.8 - заработало. Спасибо за ответы!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version