代码之家  ›  专栏  ›  技术社区  ›  Michael Morisy

在Django运行datepicker最干净、最简单的方法是什么?

  •  35
  • Michael Morisy  · 技术社区  · 16 年前

    Thauber Schedule datepicker ,但它是一个日期时间选择器,我不能让它只做日期。关于如何与Django日期表单字段集成的说明,对漂亮的日期选择器有什么建议吗?

    11 回复  |  直到 16 年前
        1
  •  25
  •   Ali    16 年前

    您也可以在模板中简单地使用Jquery。jquery日期时间选择器允许每个定制。

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

        2
  •  71
  •   avi    10 年前

    以下是我所做的,完全没有外部依赖关系:

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

    表单.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

        3
  •  42
  •   Ten    6 年前

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

    您可以使用它将输入类型设置为 date ( W3C specification

    date = fields.DateField(widget=forms.widgets.DateInput(attrs={'type': 'date'}))
    
        4
  •  15
  •   Munim Munna    8 年前

    当谈到约会挑选者时,我的选择是 Bootstrap Datepicker django-bootstrap-datepicker-plus 它适用于较新和较旧的DJango版本。我维护了存储库,并在DJango版本中测试了它的工作情况 1.8 , , 1.11 和 .

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

    Github Page

    免责声明: 这个小部件包现在由我拥有和维护。如果有任何问题,请随时在 .

        5
  •  7
  •   Andy Ward    9 年前

    avi的解决方案也可以在不使用其他django输入类的情况下完成:

    class PromiseForm(ModelForm):
    
        class Meta:
            model = Promise
            fields = ['title', 'description', 'made_on']
            widgets = {
                'made_on': DateInput(attrs={'type': 'date'}),
            }
    
        6
  •  4
  •   J. Hacker    11 年前

    由于对编码比较新,我使用这个例子是因为它很容易。

    <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>
    
        7
  •  2
  •   KindOfGuy    13 年前
        8
  •  1
  •   Arindam Roychowdhury    7 年前

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

    <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>
    
        9
  •  0
  •   AndrewRM    11 年前

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

        10
  •  0
  •   dsyed    10 年前

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

    希望这有帮助。 enter image description here

        11
  •  0
  •   Viswanathan L    7 年前

    通过pip命令安装bootstrap\u datepicker\u plus。

    pip安装django-bootstrap\u datepicker\u plus

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

    设置.py

    INSTALLED_APPS = [
        'bootstrap_datepicker_plus',
    ]