【发布时间】:2017-06-16 12:50:25
【问题描述】:
我在使用 DurationField 和 TimeField 时运行 python manage.py migrate 时遇到了这个错误:
return int(round(value.total_seconds() * 1000000))
AttributeError: 'int' object has no attribute 'total_seconds'
我在这个网站上看到过这个错误,但只针对 Django 1.8。目前,我正在使用 Django 1.10。 我已经尝试过这些建议:
DurationField(default=timedelta()),
DurationField(),
DurationField(default=timedelta()),
DurationField(default=int(timedelta(minutes=20).total_seconds())).
我的模型目前看起来像:
class SomeModel(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
lunchnumber = models.IntegerField(null=True, blank=True)
role = models.PositiveSmallIntegerField(choices=ROLE_CHOICES,null=True, blank=True)
breaktime = models.DurationField(default=timedelta(minutes=45))
def to_python(self, value):
if value is None:
return value
if isinstance(value, datetime.timedelta):
return value
try:
parsed = parse_duration(value)
except ValueError:
pass
else:
if parsed is not None:
return parsed
解决 Prakhar Trivedi 的问题: 我不知道什么值不能很好地工作。我假设这是 django 尝试填充该数据库表的默认值。我有这种印象是因为 .......在 get_db_prep_value return int(round(value.total_seconds() * 1000000)) AttributeError:“int”对象没有属性“total_seconds”
解决 iklinac 的答案:
我进去并添加了 default=timedelta(minutes=45)。我确实从日期时间导入了它,但我觉得我错过了一些东西。我对此很陌生,还没有看到 to_python 函数。我错过了什么我仍然收到同样的错误?
【问题讨论】:
-
value.total_seconds() 中的value 是什么。哪个字段是你模型的值??
-
ooh @PrakharTrivedi 这就是我要问的,似乎我问了其他问题:)
-
嘿,Travis,您是否检查过您是否按照我在您的 models.py 中所述的方式导入了 timedelta。同样关于在 Duration 字段后面的函数的 to_python 函数也不需要包含它。关于评论的最后一部分,如果 datetime 仍然有问题,您可以使用 parse_value 的评论部分中所述的 django 时间格式
-
所以你可以设置 default='timestring' 的格式如下所述
标签: django django-models django-1.10