- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 Django 1.8 中使用新的 DurationField 有困难
我在使用 Django 的新 DurationField 时遇到了一些麻烦对于模型。
我希望用户能够选择我的网络应用程序上事件的持续时间是 1 天、3 天还是 5 天,默认选择是 3 天。
在我的模型开始时,我声明了选择:
SHORT = datetime.timedelta(days=1)
MEDIUM = datetime.timedelta(days=3)
LONG = datetime.timedelta(days=5)
DURATION_CHOICES = ((SHORT, '1 day'),(MEDIUM, '3 days'), (LONG, '5 days'),)
然后在下面,我声明 DurationField:
duration = models.DurationField(choices = DURATION_CHOICES, default = MEDIUM)
我为模型创建了一个 ModelForm,并将其呈现在适当的模板上。在表单上,“3 天”是下拉列表中的预选选项,“1 天”和“5 天”也是选项。但是,当我提交表单时,我收到表单验证错误“选择一个有效的选项。3 天,0:00:00 不是可用选项之一。”
但是,当我从 DurationField 中删除选项并保留默认值时:
duration = models.DurationField(default = MEDIUM)
我可以毫无问题地提交。我在这里做错了什么?
最佳答案
是否遇到过同样的问题,此错误修复单中解释了该问题
https://code.djangoproject.com/ticket/24897
解决此问题的最佳方法是在等待 django 团队修复该问题时使用此自定义字段:
"""
This is a temp DurationField with a bugfix
"""
standard_duration_re = re.compile(
r'^'
r'(?:(?P<days>-?\d+) (days, )?)?'
r'((?:(?P<hours>\d+):)(?=\d+:\d+))?'
r'(?:(?P<minutes>\d+):)?'
r'(?P<seconds>\d+)'
r'(?:\.(?P<microseconds>\d{1,6})\d{0,6})?'
r'$'
)
# Support the sections of ISO 8601 date representation that are accepted by
# timedelta
iso8601_duration_re = re.compile(
r'^P'
r'(?:(?P<days>\d+(.\d+)?)D)?'
r'(?:T'
r'(?:(?P<hours>\d+(.\d+)?)H)?'
r'(?:(?P<minutes>\d+(.\d+)?)M)?'
r'(?:(?P<seconds>\d+(.\d+)?)S)?'
r')?'
r'$'
)
def parse_duration(value):
"""Parses a duration string and returns a datetime.timedelta.
The preferred format for durations in Django is '%d %H:%M:%S.%f'.
Also supports ISO 8601 representation.
"""
match = standard_duration_re.match(value)
if not match:
match = iso8601_duration_re.match(value)
if match:
kw = match.groupdict()
if kw.get('microseconds'):
kw['microseconds'] = kw['microseconds'].ljust(6, '0')
kw = {k: float(v) for k, v in six.iteritems(kw) if v is not None}
return datetime.timedelta(**kw)
class DurationField(CoreDurationField):
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
raise exceptions.ValidationError(
self.error_messages['invalid'],
code='invalid',
params={'value': value},
)
关于python - Durationfield django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29419396/
我有一个 DurationField在我的模型中定义为 day0 = models.DurationField('Duration for Monday', default=datetime.time
我正在尝试运行一个使用 django rest 框架的应用程序。但是我收到导入错误“无法导入名称 DurationField”。我该如何解决此错误? 错误信息 enter image descript
在 Django 1.8 中使用新的 DurationField 有困难 我在使用 Django 的新 DurationField 时遇到了一些麻烦对于模型。 我希望用户能够选择我的网络应用程序上事件
在我的模型中,我希望能够输入持续时间,例如 2 年、5 个月 等。 在 1.8 版中引入了 DurationField,所以我尝试使用它: 在我的模型中 user_validPeriod = mode
我正在尝试运行一个使用 django(版本 1.6.5)rest 框架(python 版本 3.4.5)的应用程序。但是我收到了导入错误“无法导入名称 DurationField”。我该如何解决这个错
我想将默认值从 django 1.8 传递到 DurationField。根据文档,它应该是 datetime.timedelta from datetime import timedelta pau
Django 的 DurationField 的正确使用方法是什么? 当我使用 time_passed = models.DurationField(default=0) 时: 迁移工作 表单默认值不
我使用的是 Django 1.8,我将我的字段之一定义为 DurationField,但我找不到任何方法在我的模板上正确显示它,如果我这样输出它: {{runtime}} i just get 0:0
我有两个模型:Post、Comment(Comment 与 Post 有 FK 关系)。 现在我想用他们的“响应时间”返回所有帖子。我以 timedelta 格式获得此响应时间。我可以在几秒钟内收到它
我有一个包含持续时间字段的 Django 模型: class Entry(models.Model): duration = models.DurationField() 我想使用 Model
我要加DurationField用于管理站点的小部件,并希望持续时间字段的小部件用于输入。 问题陈述 在下面 PromoCode类有DurationField即 duration .但是在管理中它显示
我有以下模型 class MyModel(models.Model): start = models.TimeField() finish = models.TimeField()
我是一名优秀的程序员,十分优秀!