Python Django DurationField默认值
我想将默认值从django 1.8传递到DurationField。根据文档,它应该是datetime.timedeltaPython Django DurationField默认值,python,django,timedelta,django-1.8,Python,Django,Timedelta,Django 1.8,我想将默认值从django 1.8传递到DurationField。根据文档,它应该是datetime.timedelta from datetime import timedelta pause = DurationField(default=timedelta(minutes=20)) 但在makemigrations上,它说: ValueError: Cannot serialize: datetime.timedelta(0, 1200) There are some values D
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.
嗯。也许我们应该传递整数
pause = DurationField(default=int(timedelta(minutes=20).total_seconds()))
或:
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'
self.query.objs中obj的
文件“/home/web/django_env/lib/python3.4/site packages/django/db/models/sql/compiler.py”,第920行,在
对于self.query.objs中的obj
文件“/home/web/django_env/lib/python3.4/site packages/django/db/models/sql/compiler.py”,第918行,在
)场中的f
文件“/home/web/django_env/lib/python3.4/site packages/django/db/models/fields/__init__.py”,第710行,在get_db_prep_save中
准备就绪(错误)
文件“/home/web/django_env/lib/python3.4/site packages/django/db/models/fields/__init__.py”,第1683行,在get_db_prep_值中
返回值。总秒数()*1000000
AttributeError:“int”对象没有“total_seconds”属性
所以它需要时间增量?你把事情的顺序稍微弄混了:
pause = DurationField(default=int(timedelta(minutes=20).total_seconds()))
如前所述,整数没有
total_seconds()
属性。相反,它是一个。默认值应该是timedelta。这是Django中的一个bug,将在1.8.1版本中修复。
见:
因此pause=DurationField(默认值=timedelta(分钟=20))
应该适用于1.8.1版本。抱歉,qestion中有错误,我尝试了int(timedelta(minutes=20)。total_seconds())我没有答案,这可能是个错误。但请看下面这张票:,其中一位核心django开发人员说:“您应该为您的DurationField默认值提供一个timedelta值”。
pause = DurationField(default=int(timedelta(minutes=20).total_seconds()))