首页 > 解决方案 > 在 Django 中,将小部件设置为 DateInput 时,预填充 DateField 不起作用

问题描述

我希望用特定日期预先填写表单字段。

我有一个 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'}))
    # ...

为什么呢?我能做些什么呢?这种行为是否记录在案?

标签: djangodjango-forms

解决方案


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

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

但你想要的是:

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

有关演示,请参阅此jsfiddle

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


推荐阅读