Durationfield django

7 python django django-forms django-1.8

难以在Django 1.8中使用新的DurationField

我对Django的模型新的DurationField有点麻烦.

我希望用户能够选择我的webapp上的事件持续时间是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'),)
Run Code Online (Sandbox Code Playgroud)

然后在下面,我声明了DurationField:

duration = models.DurationField(choices = DURATION_CHOICES, default = MEDIUM)
Run Code Online (Sandbox Code Playgroud)

我为模型创建了一个ModelForm,并在适当的模板上呈现它.在表格中,"3天"是下拉列表中的预选选项,"1天"和"5天"也是选项.但是,当我提交表单时,我收到表单验证错误"选择有效选项.3天,0:00:00不是可用选项之一."

但是,当我从DurationField中删除选项并保留默认值时:

duration = models.DurationField(default = MEDIUM)
Run Code Online (Sandbox Code Playgroud)

我可以毫无问题地提交.我在这做错了什么?

Raj*_*mon 0

不知何故,模型选项在或转换为 时choices未给出timedelta字符串。rendertemplate

还有 Model DurationField Field DurationField 不工作...

我通过使用解决了它ChoiceField

代码:

class TestForm(ModelForm):
    SHORT_1 = str(timedelta(days=1)).replace('day,', '')
    SHORT = SHORT_1.replace('  ',' ')
    MEDIUM_1 = str(timedelta(days=3)).replace('days,', '')
    MEDIUM = MEDIUM_1.replace('  ',' ')
    LONG_1 = str(timedelta(days=-5)).replace('days,', '')
    LONG = LONG_1.replace('  ',' ')

    DURATION_CHOICES = ((SHORT, '1 day'),(MEDIUM, '3 days'), (LONG, '5 days'),)
    duration = forms.ChoiceField(widget = forms.Select(), 
                     choices = (DURATION_CHOICES), initial='MEDIUM', required = True,)

    class Meta:
        model = Test
        fields = ['duration']
Run Code Online (Sandbox Code Playgroud)

我不知道是否不推荐...我也在寻找为什么 django 默认不工作...