2010-07-29 1 views
29

Мне нравится Thauber Schedule datepicker, но это сборщик данных, и я не могу заставить его делать только даты. Любые рекомендации для красивых пользователей datepickers, которые содержат инструкции по интеграции с полем формы даты Django?Какая самая чистая, простая в использовании датапикер в Django?

+4

Если я задаю вопросы, которые относятся к рекомендациям softwarer, тогда они получат голосование или закрытие. Вам повезло :-) – guettli

ответ

15

Вы также можете просто использовать Jquery в шаблонах. Функция jQuery DateTime Picker позволяет выполнять каждую настройку.

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

+0

Спасибо. Я никогда не врывался в JQuery, но через несколько часов он обманывал меня именно таким, каким хотел. –

+3

Np, удачи в вашем проекте. Но помните, Jquery - это просто javascript на стороне клиента. Таким образом, кто-то может отправлять данные в класс формы с неправильными или вредоносными данными, таким образом проверяя все и помещая действия вида в предложение try/except. – Ali

+1

Для проверки данных используйте формы Django (https://docs.djangoproject.com/en/dev/topics/forms/) – Olli

11

Если вам нравится виджет даты Django Admin, вы можете включить его в свое приложение. Преимуществом является отсутствие внешних зависимостей. Кто отвечал как-бы на группе Джанго-пользователей некоторое время назад:

+1

Спасибо, Ars! Я действительно видел сообщение SO по этому методу, который меня немного испугал: http://bit.ly/br5lLG –

2

Я нашел это довольно гладко для DateTimeField дружной вариант https://github.com/asaglimbeni/django-datetime-widget

Необходимо, чтобы включить bootstrap-timepicker css file from malot, и она работала довольно аккуратно.

+0

Как реализовать это в элементе Django forms.Form вместо ссылки на модель? – scriptdiddy

+0

Ничего, я понял. Спасибо за сообщение! – scriptdiddy

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

+0

@spectras: На самом деле, это * норма * с HTML5, см. [Здесь] (http://www.w3schools.com/html/html_form_input_types.asp) или [здесь] (http://html5doctor.com/html5 -формы-ввод-тип /). – theV0ID

+1

Это норма, как в * «браузер должен знать, что у него есть дата внутри» *. Норм, однако, не говорит, как это должно быть показано. Internet Explorer, Firefox и Safari будут отображать их как обычные текстовые поля, что отлично с нормой ... но не то, что хочет OP. – spectras

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

+0

Я получаю 'Введите допустимую дату/время. 'С" datetime-local ". Может быть, валидатор также должен быть адаптирован? – qznc

+0

@qznc вы можете показать код, а также полную трассировку стека ошибок? – avi

0

Использование datetime-local в качестве типа для input.Its не очень фантазии looking.But сделает работу

Надеюсь, это поможет. enter image description here

10

Django's TextInput виджет (и все его подклассы) поддерживает указание атрибута типа для установки типа формы.

Вы можете использовать это, чтобы установить тип входа в date (W3C specification), например, следующим образом:

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

Это работает действительно красиво ... если вы используете только браузер Chrome. Атрибут HTML, необходимый для его реализации, в настоящее время не поддерживается в Safari или Firefox. – William

1

решение AVI также может быть сделано без использования дополнительного входного класса Джанго:

class PromiseForm(ModelForm): 

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

В настоящее время в 2018 году, после выпуска версии DJango 2, довольно сложно найти виджет datepicker, который все еще работает или поддерживается. Я рекомендую django-bootstrap-datepicker-plus, что удивительно работает как на более новых, так и на старых версиях DJango. Я тестировал его в версиях Django 1.10.7 и 2.0.2, отлично работает в обеих версиях.

Установка довольно проста. Вы просто установите его.

pip install django-bootstrap-datepicker-plus 

Добавить его в список установленных приложений в файл settings.py.

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

Подробные инструкции доступны на Джанго-самозагрузки-Datepicker-плюс Github Page.