Используем встроенный календарь в 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
Логин Регистрация
