Используем встроенный календарь в Django

Заметка о том, как задействовать календарь из админки Django. Создаём файл widgets.py в нашем приложении:


# -*- coding: utf-8 -*-
import i18nblog.settings as settings
from django import forms

class CalendarWidget(forms.TextInput):
    '''
    Данный виджет является, практически, копией
    django.contrib.admin.widgets.AdminDateWidget
    Но наследование от AdminDateWidget не удалось из-за неверного
    порядка JS-файлов в результирующем html, при наследовании.

    Для работы необходимо в urls.py добавить:
    (r'^admin/jsi18n/', 'django.views.i18n.javascript_catalog'),
    '''
    class Media:
        js = ('/admin/jsi18n/',
              settings.ADMIN_MEDIA_PREFIX + 'js/core.js',
              settings.ADMIN_MEDIA_PREFIX + "js/calendar.js",
              settings.ADMIN_MEDIA_PREFIX + "js/admin/DateTimeShortcuts.js")
        css = {
            'all': (
                settings.ADMIN_MEDIA_PREFIX + 'css/forms.css',
                #settings.ADMIN_MEDIA_PREFIX + 'css/base.css',
                settings.ADMIN_MEDIA_PREFIX + 'css/widgets.css',)
        }

    def __init__(self, attrs={}):
        super(CalendarWidget, self).__init__(attrs={'class': 'vDateField', 'size': '10'})

В файле forms.py


from widgets import CalendarWidget

class MyForm(forms.ModelForm):
    """
    MyForm Form. Composed by all the MyForm model fields.
    """
    class Meta:
        model = MyModelClass
        
    def __init__(self, *args, **kwargs):
        super(MyModelClass, self).__init__(*args, **kwargs)
        # подключаем наш календарь
        self.fields['date'].widget = CalendarWidget()

Шаблон будет следующего содержания:


{% extends "base.html" %}
{% load adminmedia %}
...
<!--  extrajs - блок подключаемый в теге <head>  -->
{% block extrajs %}
<script type="text/javascript">
window.__admin_media_prefix__ = "{% filter escapejs %}{% admin_media_prefix %}{% endfilter %}";
</script>
{% endblock %}

<!-- Перед созданием формы, необходимо вызвать {{ form.media }}-->
{% block content %}
  {{ form.media }}
  {{ form.as_p }}
{% endblock %}

В urls.py необходимо добавить строчку:


urlpatterns += patterns('',
    (r'^admin/jsi18n/', 'django.views.i18n.javascript_catalog'),
)

Написано на базе http://larin.in/archives/165 и http://stackoverflow.com/questions/38601/using-django-time-date-widgets-in-custom-form

Логин Регистрация

Логин

Облако тэгов

count count all django django admin feedparser libxml2dom linux mysql parser payway python pyunit pyvkapi qiwi return sniffer sockets ssh ssh tunnel sublime text tdd tehtv templatetags ubuntu unittest webmoney X11 аргументы биллинг видео видеоурок видео уроки вконтакте возврат диаграмма диаграмма стека заметки инструкция комментарии композиция логические операторы мышка образование обучение операторы параметры функции парсинг переменная переменные питон платежи поток выполнения преобразование типов программирование проекты процессинг разработка разработкаразработка рекурсия сеть скрипт сниффер сокеты стек стоки тестирование тип тип данных типы урок уроки условия функция
free counters