我喜欢Thauber Schedule datepicker,但这是一个约会时间选择器,我不能仅仅做日期。有关如何与Django日期表单字段集成的说明的好看日期选择器的任何建议吗?
答案 0 :(得分:30)
以下是我的工作,根本没有外部依赖:
models.py:
from django.db import models
class Promise(models):
title = models.CharField(max_length=300)
description = models.TextField(blank=True)
made_on = models.DateField()
forms.py:
from django import forms
from django.forms import ModelForm
from .models import Promise
class DateInput(forms.DateInput):
input_type = 'date'
class PromiseForm(ModelForm):
class Meta:
model = Promise
fields = ['title', 'description', 'made_on']
widgets = {
'made_on': DateInput(),
}
我的观点:
class PromiseCreateView(CreateView):
model = Promise
form_class = PromiseForm
我的模板:
<form action="" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Create" />
</form>
日期选择器如下所示:
答案 1 :(得分:18)
您也可以在模板中使用Jquery。 jquery DateTime Picker允许每个自定义。
答案 2 :(得分:15)
Django的TextInput小部件(及其所有子类)支持指定type属性来设置表单类型。
您可以使用此选项将输入类型设置为date
(W3C specification),例如通过以下方式:
date = fields.DateField(widget=forms.widgets.DateInput(attrs={'type': 'date'}))
答案 3 :(得分:6)
说到日期选择器,我的选择是Bootstrap Datepicker。您可以使用django-bootstrap-datepicker-plus在django应用中实现它,它适用于较新和较旧的DJango版本。我维护存储库并在DJango版本 1.8 , 1.10 , 1.11 和 2.0.4 中测试它。< / p>
设置非常简单。你只需安装它。
pip install django-bootstrap-datepicker-plus
在 forms.py 文件
中导入小部件 from bootstrap_datepicker_plus import DatePickerInput
将小部件添加到日期字段
class ToDoForm(forms.Form):
date = forms.DateField(
widget=DatePickerInput(
options={
"format": "mm/dd/yyyy",
"autoclose": True
}
)
)
详细说明可在django-bootstrap-datepicker-plus Github Page上找到。
免责声明:此小部件包现在由我拥有和维护。对于任何问题,请随时在Github Page上打开问题。
答案 4 :(得分:2)
我发现DateTimeField
友好选项https://github.com/asaglimbeni/django-datetime-widget
需要加入bootstrap-timepicker css file from malot,而且工作得非常整齐。
答案 5 :(得分:2)
为了更新编码,我使用这个例子是因为它很容易。
<form method="POST">{% csrf_token %}
<p>Start date<input type = 'date' name='start_date' ></p>
<p>End date<input type = 'date' name='end_date' ></p>
<button type="submit">Submit</button>
</form>
答案 6 :(得分:2)
avi的解决方案也可以在不使用额外的django输入类的情况下完成:
class PromiseForm(ModelForm):
class Meta:
model = Promise
fields = ['title', 'description', 'made_on']
widgets = {
'made_on': DateInput(attrs={'type': 'date'}),
}
答案 7 :(得分:0)
我一直在努力解决类似的问题,我发现以下解决方案令人满意,使用软盘形式:
这非常有效并且相对容易实现,希望有人会发现它有用。祝你好运。
答案 8 :(得分:0)
答案 9 :(得分:0)
这对我有用。我正在将Django 1.11和bootstrap 3.3一起使用。
Form.py
from django.contrib.admin.widgets import AdminDateWidget
class AddInterview(forms.ModelForm):
class Meta:
model = models.Interview
fields = ['candidate', 'date', 'position', 'question_set']
date = forms.DateField(widget=AdminDateWidget())
模板:
<form method="post">
<div class="form-group">
{% csrf_token %}
{{ form.media }}
{{ form.as_p }}
<p>Note: Date format is yyyy-mm-dd</p>
</div>
CSS :(与上述html模板文件相同)
<link rel="stylesheet" type="text/css" href="{% static 'admin/css/forms.css' %}"/>
<link rel="stylesheet" type="text/css" href="{% static 'admin/css/widgets.css' %}"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" >
JS :(与上述html模板文件相同)
<script type="text/javascript" src="/admin/jsi18n/"></script>
<script type="text/javascript" src="{% static 'admin/js/core.js' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/admin/RelatedObjectLookups.js' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/vendor/jquery/jquery.min.js' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/jquery.init.js' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/actions.min.js' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/calendar.js' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/admin/DateTimeShortcuts.js' %}"></script>
答案 10 :(得分:0)
这就是我要以Django形式获取日期选择器的方法。
通过pip命令安装bootstrap_datepicker_plus。
pip install django-bootstrap_datepicker_plus
forms.py
from .models import Hello
from django import forms
from bootstrap_datepicker_plus import DatePickerInput
class CreateForm(forms.ModelForm):
class Meta:
model = Hello
fields =[
"Date",
]
widgets = {
'Date': DatePickerInput(),
}
settings.py
INSTALLED_APPS = [
'bootstrap_datepicker_plus',
]
答案 11 :(得分:0)
这是一种仅使用 html5 和 django 的超简单方法:
forms.py
class DateInput(forms.DateInput):
input_type = 'date'
class DateForm(forms.Form):
start_date = forms.DateField(widget=DateInput)
end_date = forms.DateField(widget=DateInput)
视图.py
def search_dates(request, pk=''):
if request.method == "GET": # select dates in calendar
form = DateForm()
return render(request, 'search.html', {"form":form})
if request.method == "POST": # create cart from selected dates
form = DateForm(request.POST)
if form.is_valid():
start = form.cleaned_data['start_date']
end = form.cleaned_data['end_date']
start_date = datetime.strftime(start, "%Y-%m-%d")
end_date = datetime.strftime(end, "%Y-%m-%d")
print(start_date)
print(end_date)
return render(request, 'search.html', {"form":form})
模板
<form method="post">
{% csrf_token %}
{{ form.as_table }}
<p style="text-align: center"><input type="submit" value="Search"></p>
</form>