Django中最干净,最简单的运行日期选择器是什么?

时间:2010-07-29 21:28:30

标签: django datepicker

我喜欢Thauber Schedule datepicker,但这是一个约会时间选择器,我不能仅仅做日期。有关如何与Django日期表单字段集成的说明的好看日期选择器的任何建议吗?

12 个答案:

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

日期选择器如下所示:

enter image description here

答案 1 :(得分:18)

您也可以在模板中使用Jquery。 jquery DateTime Picker允许每个自定义。

http://jqueryui.com/demos/datepicker/

答案 2 :(得分:15)

Django的TextInput小部件(及其所有子类)支持指定type属性来设置表单类型。

您可以使用此选项将输入类型设置为dateW3C 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>

bootstrap datepicker

设置非常简单。你只需安装它。

  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)

使用datetime-local作为输入的类型。它看起来不是很花哨。但是会做这个工作

希望这会有所帮助。enter image description here

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