在Django中,将小部件设置为DateInput时,预填充DateField不起作用

时间:2018-11-02 10:15:40

标签: django django-forms

我希望在表单字段中预填特定的日期。

我有一个CreateView:

class CreateEventView(CreateView):
    model = Event
    template_name = 'events/form.html'
    form_class = EventForm

    def get_initial(self):
        initial = super(CreateEventView, self).get_initial()
        initial['start_date'] = datetime.date(day=2,month=11,year=2018)
        return initial

如果我使用此ModelForm,它将在文本字段中显示预填写的日期(如预期):

class EventForm(ModelForm):
    start_date = DateField()
    # ...

但是我希望使用一个不错的日期选择器小部件。但随后的预填充不再起作用:

class EventForm(ModelForm):
    start_date = DateField(widget=DateInput(attrs={'type': 'date'}))
    # ...

为什么会这样?我该怎么办?是否在某处记录了这种行为?

2 个答案:

答案 0 :(得分:1)

在Django中这不是问题。 HTML数据输入需要格式为YYYY-MM-DD的默认值。确保使用该日期格式的日期进行渲染。我怀疑现在它可能呈现为:

<input type='date' name='date' value='22-02-2018'/>

但是您想要的是:

<input type='date' name='date' value='2018-02-22'/>

有关演示,请参见此jsfiddle

您需要在后端的字符串中正确设置日期值的格式,或者在渲染后执行一些js魔术。

答案 1 :(得分:0)

我需要像这样向小部件添加格式:

class EventForm(ModelForm):
    start_date = DateField(widget=DateInput(format='%Y-%m-%d', attrs={'type': 'date'}), required=False)