Django 最干净、最简单的运行日期采集器是什么?

我喜欢 Thauber 计划日期采集器,但它是一个日期时间选择器,我不能让它只做日期。对于漂亮的日期采集器,有没有什么建议? 这些日期采集器附有如何与 Django 日期表单字段集成的说明?

115672 次浏览

您也可以简单地在模板中使用 Jquery。

Http://jqueryui.com/demos/datepicker/

我发现这相当顺利的 DateTimeField友好的选项 https://github.com/asaglimbeni/django-datetime-widget

需要包括 来自 malot 的 bootstrap-timepicker css 文件和它的工作相当整齐。

我一直在努力解决一个类似的问题,我发现下面的解决方案令人愉快,使用软盘形式:

这个工作真的很好,相对容易实现,希望有人会发现它的帮助充分。祝你好运。

作为编码的新手,我使用这个例子是因为它很容易。

<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>

以下是我所做的,没有任何外部依赖性:

Py:

from django.db import models




class Promise(models):
title = models.CharField(max_length=300)
description = models.TextField(blank=True)
made_on = models.DateField()

表格:

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>

日期选择器看起来像这样:

enter image description here

使用 datetime-local作为输入的类型。它不是很花哨的外观。但会做的工作

希望这个能帮上忙。enter image description here

Django 的 文本输入小部件(及其所有子类)支持指定一个 type 属性来设置表单的类型。

您可以使用它将输入类型设置为 date(W3C 规范) ,例如:

date = fields.DateField(widget=forms.widgets.DateInput(attrs={'type': 'date'}))

Avi 的解决方案也可以在不使用额外的 django 输入类的情况下完成:

class PromiseForm(ModelForm):


class Meta:
model = Promise
fields = ['title', 'description', 'made_on']
widgets = {
'made_on': DateInput(attrs={'type': 'date'}),
}

说到约会对象,我的选择是 自举数据采集器。您可以通过使用 Django-bootstrap-datepicker-plus在您的 DJango 应用程序中实现它,Django-bootstrap-datepicker-plus可以在较新和较旧的 DJango 版本上工作。我维护了存储库,并在 DJango 版本 1.81.101.112.0.4中测试了它。

bootstrap datepicker

安装非常简单,只需要安装即可。

  pip install django-bootstrap-datepicker-plus

表格 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

这是什么工作对我来说。我使用 Django 1.11与引导程序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>

这就是我用 django 表格得到日期提取器的方法。

通过 pip 命令安装 bootstrap _ datepicker _ plus。

Pip install django-bootstrap _ datepicker _ plus

表格 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(),
}

设置

INSTALLED_APPS = [
'bootstrap_datepicker_plus',
]

这里有一个使用 html5和 django 的超级简单的方法:

表格 py

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


class DateForm(forms.Form):
start_date = forms.DateField(widget=DateInput)
end_date = forms.DateField(widget=DateInput)

Views.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>

下面是我最喜欢的直接从 CreateView工作的实现。

from django.views.generic import CreateView
from django.contrib.admin.widgets import AdminDateWidget
from .models import MyModel


class MyModelCreateView(CreateView):
template_name = 'form.html'
model = MyModel
fields = ['date_field', ...]


def get_form(self, form_class=None):
form = super(MyModelCreateView, self).get_form(form_class)
form.fields['date_field'].widget = AdminDateWidget(attrs={'type': 'date'})
return form

唯一可以更简单的方法是将这作为通用 CBV 的默认行为!

只需将这行代码添加到我的模板 html 中,就解决了我的问题:

<div class="mb-3">
<label for="exampleFormControlInput1" class="form-label">Email address</label>
<input type="date" class="form-control" id="exampleFormControlInput1" placeholder="name@example.com">
</div>

enter image description here

[来源]