管理インターフェースでない通常フォームでは、外部のカレンダーウィジットを使用してもよい。しかし、管理インターフェースと同一のカレンダーを利用したい場合、以下の設定で利用可能だ。
-
テンプレートファイルのheaderタグ内に、次のjavascriptファイル記述を追加する。
<script type="text/javascript" src="/jsi18n/"></script> <script type="text/javascript" src="/media/js/core.js"></script> <script type="text/javascript" src="/media/js/admin/RelatedObjectLookups.js"></script> <script type="text/javascript" src="/media/js/calendar.js"></script> <script type="text/javascript" src="/media/js/admin/DateTimeShortcuts.js"></script>
さらに、次のcssファイル記述も追加する。<link rel="stylesheet" type="text/css" href="/media/css/base.css" /> <link rel="stylesheet" type="text/css" href="/media/css/forms.css" />
-
settings.py のurlpatterns に次の設定を追加する。
(r'^jsi18n/$', 'django.views.i18n.javascript_catalog', {'packages': 'django.conf'}),
-
カレンダーウィジットで制御したいフォーム・フィールドに次のように変更を加える。
通常 forms.py にて定義する。
まず、ウィジットライブラリーをインポートする。from django.contrib.admin import widgets as adminwidget
次に、制御したいフォーム・フィールドの weight引数に adminwidget.AdminDateWidgetを渡す。
設定例class ItemForm(ModelForm): start_date = forms.DateField(label=u'日付',widget=adminwidget.AdminDateWidget) class Meta: model = Item
強調表示のところで、start_date というフィールドにウィジットを設定している。
設定例ではモデルフォームを利用している。つまり Itemモデルを利用したItemFormモデルフォームのクラスを定義し、変更が必要な箇所(ここではstart_date)だけ変更を行っている。
以上で設定は完了する。
実際の表示イメージを以下で示す。
カレンダーを設定したフィールド の表示例 |
|
カレンダー・ウィンドウの表示例 |