7

具体来说,我想以表单呈现日期小部件,但我希望它“成为”HTML5(所以我可以忘记 javascript 或其他任何东西,并信任 Chrome、Opera 和 Safari 来显示日期选择器)。

请不要使用javascript解决方案,我已经在网上找到了。

这是我的代码片段,但它仍然将表单字段thedate的类型属性作为“文本”。

#models.py

class MyModel(models.Model):
    user = models.ForeignKey(User)
    thedate = models.DateField()

#forms.py

class MyModelForm(ModelForm):
    class Meta:
        model = MyModel
        widgets = {
            'thedate': TextInput(attrs={'type': 'date'}),
        }

任何人都可以阐明一下吗?

提前致谢。

4

3 回答 3

12

使用 django-html5

  1. 安装django-html5pip install django-html5

  2. 在forms.py中,import html5.forms.widgets as html5_widgets

  3. widgets['thedate'] = html5_widgets.DateInput

我没有亲自测试它,因为我刚刚发现了诀窍,但多亏了你,我可能会使用它:D

只需覆盖 input_type

您也可以制作自己的小部件,想法如下:

from django import forms

class Html5DateInput(forms.DateInput):
    input_type = 'date'

详情请参阅django/forms/widgets.py;)

于 2012-10-26T21:08:51.583 回答
5

这是一个简单的:

将此代码放在 form.py 的任何位置

forms.DateInput.input_type="date"
forms.DateTimeInput.input_type="datetime-local" 
于 2013-06-09T05:13:06.130 回答
2

这是基本上jpic的解决方案的代码片段,也是我在这里寻找答案后使用的-->

class EmailTextInput(django.forms.widgets.TextInput):
    """Subclass TextInput since there's no direct way to override its type attribute"""
    input_type ='email'

class MyModelForm(ModelForm):
    class Meta:
        model = MyModel
        widgets = {
            'thedate': EmailTextInput()
        }
于 2013-01-03T22:37:07.650 回答