Bu cevabın zaman içinde artan karmaşıklığı ve gerekli olan birçok hack, muhtemelen bunu hiç yapmamanız konusunda sizi uyarmalıdır. Yöneticinin belgelenmemiş dahili uygulama ayrıntılarına dayanıyor, Django'nun gelecekteki sürümlerinde tekrar kırılması muhtemel ve sadece başka bir JS takvim widget'ı bulmak ve bunu kullanmaktan daha kolay değil.
Bununla birlikte, bu işi yapmaya kararlıysanız yapmanız gerekenler:
Modeliniz için kendi ModelForm alt sınıfınızı tanımlayın (uygulamanızda forms.py dosyasına koymak en iyisidir) ve YöneticiDateWidget / AdminTimeWidget / AdminSplitDateTime'ı ('mydate' vb. Modelinizden uygun alan adlarıyla değiştirmesini söyleyin):
from django import forms
from my_app.models import Product
from django.contrib.admin import widgets
class ProductForm(forms.ModelForm):
class Meta:
model = Product
def __init__(self, *args, **kwargs):
super(ProductForm, self).__init__(*args, **kwargs)
self.fields['mydate'].widget = widgets.AdminDateWidget()
self.fields['mytime'].widget = widgets.AdminTimeWidget()
self.fields['mydatetime'].widget = widgets.AdminSplitDateTime()
URLconf'unuzu 'model' yerine 'form_class': ProductForm değerini genel jenerasyon_object görünümüne geçirecek şekilde değiştirin (elbette "my_app.models import Product" yerine "my_app.forms import ProductForm" anlamına gelir).
Şablonunuzun başına, Javascript dosyalarına bağlantıların çıktısını almak için {{form.media}} ekleyin.
Ve hacky kısmı: yönetici tarih / saat widget'ları, i18n JS öğelerinin yüklendiğini varsayar ve ayrıca core.js gerektirir, ancak ikisini de otomatik olarak sağlamaz. Dolayısıyla, {{form.media}} üzerindeki şablonunuzda şunlara ihtiyacınız olacak:
<script type="text/javascript" src="/my_admin/jsi18n/"></script>
<script type="text/javascript" src="/media/admin/js/core.js"></script>
Aşağıdaki yönetici CSS'sini de kullanmak isteyebilirsiniz (bundan bahsettiğiniz için Alex'e teşekkür ederiz ):
<link rel="stylesheet" type="text/css" href="/media/admin/css/forms.css"/>
<link rel="stylesheet" type="text/css" href="/media/admin/css/base.css"/>
<link rel="stylesheet" type="text/css" href="/media/admin/css/global.css"/>
<link rel="stylesheet" type="text/css" href="/media/admin/css/widgets.css"/>
Bu, Django'nun yönetici ortamının (ADMIN_MEDIA_PREFIX) / media / admin / konumunda olduğu anlamına gelir - kurulumunuz için bunu değiştirebilirsiniz. İdeal olarak, bu değerleri şablonunuza sabit kodlamak yerine aktarmak için bir bağlam işlemcisi kullanırsınız, ancak bu sorunun kapsamı dışındadır.
Bu aynı zamanda URL / my_admin / jsi18n / komutunun django.views.i18n.javascript_catalog görünümüne (veya I18N kullanmıyorsanız null_javascript_catalog) manuel olarak bağlanmasını gerektirir. Yönetici uygulamasına girmek yerine bunu kendiniz yapmanız gerekir, böylece yöneticiye giriş yapıp yapmadığınıza bakılmaksızın erişilebilir (bunu işaret ettiğiniz için Jeremy'ye teşekkür ederiz ). URL bağlantınız için örnek kod:
(r'^my_admin/jsi18n', 'django.views.i18n.javascript_catalog'),
Son olarak, Django 1.2 veya üstünü kullanıyorsanız, widget'ların medyalarını bulmasına yardımcı olmak için şablonunuzda bazı ek kodlara ihtiyacınız vardır:
{% load adminmedia %} /* At the top of the template. */
/* In the head section of the template. */
<script type="text/javascript">
window.__admin_media_prefix__ = "{% filter escapejs %}{% admin_media_prefix %}{% endfilter %}";
</script>
Bu ekleme için lupefiasco teşekkürler .