Django form.as_p DateField未显示为日期输入类型

32 投票
9 回答
35488 浏览
提问于 2025-04-18 01:13

我正在开发我的第一个Django应用程序,我定义了一个模型,其中包含一些DateFields(日期字段),然后基于这个模型创建了一个ModelForm

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的输入类型是文本,而不是日期。有没有办法改变这个?

9 个回答

1

forms.py

from django import forms
from .models import MyModel
from django.forms.widgets import DateInput # need to import

class MyForm(forms.ModelForm):
    class Meta:
        model = MyModel
        fields = '__all__'
        widgets = {
            'my_date': DateInput(attrs={'type': 'date'})
        }
5

使用django-widget-tweaks这个工具包,你可以很简单地做到这一点,只需要用:

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

然后在你的类里把这个字段设置为日期时间字段:

date = forms.DateField()
13

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在另一个地方使用这些数据。这就像你从冰箱拿出食材,然后在厨房里做饭一样。

有些时候,我们会遇到一些问题,比如数据的格式不对,或者我们想要的数据没有被正确地获取到。这就像你打开冰箱,想找牛奶,但发现里面只有果汁。

为了避免这些问题,程序员们会使用一些工具和方法来确保数据能够正确地流动和使用。就像在做饭之前,你会先准备好所有的食材,确保一切都在你手边。

总之,处理数据就像做饭一样,需要仔细准备和检查,才能做出美味的菜肴。

start_date = forms.DateField(widget=forms.DateInput(attrs={'type': 'date'}))
53

其实不需要去继承 DateInput 这个类。

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

你可以创建一个自定义的小部件:

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()
        }

撰写回答