显示当前日期,但它显示在文本框中。我如何获得一个datepicker ????
models.py
class Comment(models.Model):
title = models.CharField(max_length=100)
text = models.CharField(max_length=100)
notes = models.CharField(max_length=100)
date = models.DateTimeField("Date", default=datetime.date.today)
def __str__(self):
return self.title
forms.py
class MyCommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ['title', 'text', 'notes', 'date']
views.py
def add_model(request):
if request.method == 'POST':
form = MyCommentForm()
if form.is_valid():
model_instance = form.save(commit=False)
model_instance.timestamp = timezone.now()
model_instance.save()
# return redirect('/')
else:
form = MyCommentForm()
return render(request, "form/my_template.html", {
'form': form,
})
my_template.html 要呈现表单元素
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="submit"/>
</form>
</body>
</html>
答案 0 :(得分:0)
假设:你只是让Django在模板中按原样渲染字段。
Django本身不提供日期选择器小部件,因为您发现Django用来表示DateTimeField的'小部件'是一个简单的文本字段。
要使用datepicker小部件进行渲染,您有三个选项: (如果你只想要一个解决方案,直接跳到第3个)
type
datetime-local
传递给小部件内置的Django小部件(不推荐的方法)
您可以将type
传递给窗口小部件,以使其提供在浏览器中呈现的特定字段类型。
e.g
from django.forms.widgets import DateTimeWidget
class MyCommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ['title', 'text', 'notes', 'date']
widgets = {
'date': DateTimeInput(attrs={'type': 'datetime-local'}),
}
这将导致该字段具有datetime-local
类型,某些浏览器将呈现用于输入日期和时间的小部件。
执行此操作时的一个重要注意事项是字段的value
的日期格式(因为它将在模板中呈现)非常重要。它必须是RFC 3339格式的(例如2001-10-08T22:47:31-07:00-在https://pypi.python.org/pypi/rfc3339/的PyPI中有一个RFC 3339包)
对本机日期时间窗口小部件的浏览器支持很差,并且让Django的输出与datetime-local
字段所需的值匹配是令人讨厌的。
幸运的是,有很多javascript库提供日期选择器(bootstrap有一个,有Flatpickr之类的东西)
有一些插件(例如django-datetime-widget和django-bootstrap3-datetimepicker)允许您使用Python类在Django表单中添加一个小部件,然后它将呈现一个客户端基于Javascript的小部件。
如果你能找到一个你满意的插件(即它提供你喜欢的日期/时间选择器)那么这肯定是我推荐的选项 - 主要是因为插件应该采取确保Django的输出采用基于Javascript的选择器可以处理的格式,并且该字段中的结果是Django可以处理的。
我应该注意:我没有亲自使用这些日期时间选择器。