2010-07-29 117 views

回答

15

你也可以簡單地在你的模板使用jQuery。 jquery DateTime Picker允許每個定製。

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

+0

謝謝。我從來沒有深入JQuery,但圍繞它幾個小時的推杆讓我完全想到我想要的地方。 – 2010-07-30 18:32:31

+3

Np,祝你的項目順利。但請記住,Jquery只是在客戶端的JavaScript。因此,有人可能會使用不正確或惡意的數據將數據發佈到表單類,從而驗證所有內容並將視圖操作置於try/except子句中。 – Ali 2010-07-30 22:08:10

+1

對於數據的驗證,可以使用Django表單(https://docs.djangoproject.com/en/dev/topics/forms/) – Olli 2012-06-08 13:21:26

11

如果您對Django Admin的日期小部件感到滿意,可以將它包含在您的應用中。優點是沒有外部依賴性。有人貼出瞭如何做的Django的用戶組前段時間:

+1

謝謝,Ars!我實際上看到了這個方法的SO帖子,這讓我很害怕:http://bit.ly/br5lLG – 2010-07-30 02:12:23

0

我一直在掙扎了類似的問題,我發現以下解決方案賞心悅目,用軟盤形式:

這個作品真的很好,是比較容易實現的,希望有人會發現它有幫助。祝你好運。

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

這不是日期選擇器。雖然有些瀏覽器可能會選擇顯示日期選擇器,但這絕對不是常態。 – spectras 2015-08-08 01:16:36

+0

@spectras:實際上,自從HTML5以來,它*就是標準,請參見[這裏](http://www.w3schools.com/html/html_form_input_types.asp)或[here](http://html5doctor.com/html5 -forms輸入類型/)。 – theV0ID 2015-08-13 18:24:46

+1

是規範的,如*中「瀏覽器必須知道該內部有日期」*。然而,規範並沒有說明它必須如何顯示。 Internet Explorer,Firefox和Safari將全部顯示爲常規文本框,這與規範完全一致......但不是OP所要的。 – spectras 2015-08-13 18:50:30

15

下面是我做的,在所有:

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

+0

這不適用於IE或FF。 – 2016-05-10 09:16:26

+0

我得到'用「datetime-local」輸入一個有效的日期/時間錯誤。也許驗證者也必須適應? – qznc 2016-07-15 11:49:10

+0

@qznc你可以顯示代碼和完整的錯誤堆棧跟蹤? – avi 2016-07-15 17:27:20

0

使用datetime-local類型爲input.Its不是很花哨looking.But將做的工作

希望這會有所幫助。 enter image description here

10

Django的TextInput小部件(及其所有子類)支持指定一個type屬性來設置表單的類型。

您可以通過以下方式使用此輸入類型設置爲dateW3C specification),例如:

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

這很好用...如果你的客戶只使用Chrome瀏覽器。 Safari或Firefox目前不支持實現此目標所需的HTML屬性。 – William 2016-12-10 22:58:09

1

AVI的解決方案,還可以不使用額外的Django輸入類完成:

class PromiseForm(ModelForm): 

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

眼下在2018年的Django的2.0版本發佈後它很難找到一個日期選擇器插件仍在工作或再維持。我建議django-bootstrap-datepicker-plus這令人驚訝地適用於較新和較舊的DJango版本。我在DJango版本1.10.7和2.0.2中測試了它,在兩個版本中工作正常。

設置非常簡單。你只需要安裝它。

pip install django-bootstrap-datepicker-plus 

將它添加到settings.py文件中的Installed App列表中。

INSTALLED_APPS = [ 
     'bootstrap_datepicker', 
     ...other apps... 
    ] 

導入您的forms.py文件中的小部件

from bootstrap_datepicker.widgets import DatePicker 

的小部件添加到您的日期字段

class ToDoForm(forms.Form): 
     date = forms.DateField(
      widget=DatePicker(
       options={ 
        "format": "mm/dd/yyyy", 
        "autoclose": True 
       } 
      ) 
     ) 

詳細說明,請在Django的自舉日期選擇器加Github Page

相關問題