C.B*_*.B. 11 python django django-forms
在我的第一个django应用程序上工作,我有一个模型定义了一些DateFields,然后是一个ModelForm模型,即
models.py
class MyModel(models.Model):
...
my_date = models.DateField('my date')
...
class MyModelForm(ModelForm):
class Meta:
model = MyModel
fields = '__all__'
Run Code Online (Sandbox Code Playgroud)
views.py
def show(request):
form = MyModelForm
template_name = 'myapp/show.html'
return render(request,template_name,{'form':form})
Run Code Online (Sandbox Code Playgroud)
然后在我的HTML中我使用.as_pdjango为我渲染表单
<form action="/show/" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
但是DateFields有输入类型文本,而不是日期.有没有办法改变这个?
小智 21
您可以创建自定义小部件:
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()
}
Run Code Online (Sandbox Code Playgroud)
jhr*_*hrr 20
没有必要继承DateInput.
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = '__all__'
widgets = {
'my_date': DateInput(attrs={'type': 'date'})
}
Run Code Online (Sandbox Code Playgroud)
start_date = forms.DateField(widget=forms.DateInput(attrs={'type': 'date'}))
Run Code Online (Sandbox Code Playgroud)
使用django-widget-tweaks包,你可以非常简单地通过使用以下命令来完成此操作:
{% load widget_tweaks %}
{{form.date|attr:"type:date"}}
Run Code Online (Sandbox Code Playgroud)
并使该字段成为您班级中的日期时间字段:
date = forms.DateField()
Run Code Online (Sandbox Code Playgroud)