2015-04-16 3 views
3

Я хочу передать значение по умолчанию в DurationField из django 1.8. Согласно документации, она должна быть datetime.timedeltaDjango DurationField default

from datetime import timedelta 
pause = DurationField(default=timedelta(minutes=20)) 

Но makemigrations он говорит:

ValueError: Cannot serialize: datetime.timedelta(0, 1200) 
There are some values Django cannot serialize into migration files. 

Ok. Может быть, мы должны передать целое число?

pause = DurationField(default=int(timedelta(minutes=20).total_seconds())) 

или:

pause = DurationField(default=20*60) 

makemigrations работает нормально, но при создании объекта я вижу:

for obj in self.query.objs 
    File "/home/web/django_env/lib/python3.4/site-packages/django/db/models/sql/compiler.py", line 920, in <listcomp> 
    for obj in self.query.objs 
    File "/home/web/django_env/lib/python3.4/site-packages/django/db/models/sql/compiler.py", line 918, in <listcomp> 
    ) for f in fields 
    File "/home/web/django_env/lib/python3.4/site-packages/django/db/models/fields/__init__.py", line 710, in get_db_prep_save 
    prepared=False) 
    File "/home/web/django_env/lib/python3.4/site-packages/django/db/models/fields/__init__.py", line 1683, in get_db_prep_value 
    return value.total_seconds() * 1000000 
AttributeError: 'int' object has no attribute 'total_seconds' 

Так что хотите timedelta?

+0

У меня нет ответа, это может быть ошибка. Но посмотрите этот билет: https://code.djangoproject.com/ticket/24445, где разработчик ядра django говорит: «вы должны указать значение timedelta для вашего значения DurationField по умолчанию». –

ответ

4

По умолчанию должен быть timedelta. Это ошибка в Django и устанавливается в версии 1.8.1. См.: https://code.djangoproject.com/ticket/24566

So pause = DurationField(default=timedelta(minutes=20)) Должен работать с выпуском 1.8.1.

1

Вы перепутали порядок вещей немного:

pause = DurationField(default=int(timedelta(minutes=20).total_seconds())) 

Как уже упоминалось, целые числа не имеют атрибут total_seconds(). Скорее, это instance method of timedelta.

+0

извините, ошибка в qestion, я попробовал int (timedelta (minutes = 20) .total_seconds()) – user3479125

Смежные вопросы