2014-04-03 31 views
4

在我的第一Django應用程序工作,並且我有一些DateFields定義的模型,然後ModelForm關閉該模型的即Django的form.as_p的DateField未示出的輸入類型如日期

models.py

class MyModel(models.Model): 
    ... 
    my_date = models.DateField('my date') 
    ... 

class MyModelForm(ModelForm): 
    class Meta: 
     model = MyModel 
     fields = '__all__' 

views.py

def show(request): 
    form = MyModelForm 
    template_name = 'myapp/show.html' 
    return render(request,template_name,{'form':form}) 

,然後在我的HTML我使用.as_p有Django的呈現形式對我來說

<form action="/show/" method="post">{% csrf_token %} 
{{ form.as_p }} 
<input type="submit" value="Submit" /> 
</form> 

DateFields有輸入型文本,而不是日期。有沒有辦法改變這個?通過使用

from django import forms 

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

class MyModelForm(forms.ModelForm): 
    class Meta: 
     model = MyModel 
     fields = '__all__' 
     widgets = { 
      'my_date': DateInput() 
     } 

回答

12

您可以創建自定義窗口小部件

{% load widget_tweaks %} 
{{form.date|attr:"type:date"}} 

,使該領域在類的日期時間字段:

date = forms.DateField() 
+0

好又簡單。得愛蟒蛇/ django –

+3

有人知道爲什麼這不是默認? – skolsuper

+1

@skolsuper https://code.djangoproject.com/ticket/21470 –

2

使用django-widget-tweaks包,你可以做到這一點很簡單:

+0

我曾經這樣做,但使用相同的包'render_field'模板標籤,但它似乎現在停止工作。我最近更新到Django 1.11,也許它不再兼容... –

4

有沒有必要繼承DateInput

class MyModelForm(forms.ModelForm): 
    class Meta: 
     model = MyModel 
     fields = '__all__' 
     widgets = { 
      'my_date': DateInput(attrs={'type': 'date'}) 
     } 
相關問題