Django kullanarak tarih/saat özel form widget
Nasıl varsayılan admin benim özel görünümü ile kullanan şık JavaScript tarih ve saat widget kullanabilir miyim?
the Django forms documentation, aradım ve kısa bir süre django bahseder.contrib.admin.widget, ama nasıl kullanılacağını bilmiyorum?
Burada üzerinde uygulanan istediğim benim şablon.
<form action="." method="POST">
<table>
{% for f in form %}
<tr> <td> {{ f.name }}</td> <td>{{ f }}</td> </tr>
{% endfor %}
</table>
<input type="submit" name="submit" value="Add Product">
</form>
Ayrıca, gerçekten bu form için kendimi bir görünüm yazmadım unutulmamalıdır sanırım, genel bir görünümünü kullanıyorum. İşte url.py giriş:
(r'^admin/products/add/$', create_object, {'model': Product, 'post_save_redirect': ''}),
Ve bütün Django/MVC/MTV şey, bu yüzden lütfen git kolay duruma yeni duyuyorum...
CEVAP
Zaman içinde bu cevap Artan karmaşıklığı ve çok kesmek gerekli, muhtemelen bunların hiçbirini karşı dikkatli olmalı. Admin belgelenmemiş iç Uygulama Detayları güvenerek, yine Django sürümlerini kırmak için muhtemeldir, ve sadece başka bir JS takvim widget bulmak ve bunu kullanarak daha uygulamak daha kolaydır.
O, burada, eğer bu işi yapmak için kararlı iseniz yapmanız gereken şey bu " dedi
Define kendi ModelForm alt sınıf için bir model (en iyi benzini koymak için forms.py senin app), ve bunu söylemek için kullanın AdminDateWidget / AdminTimeWidget / AdminSplitDateTime (değiştir 'mydate' vb ile uygun alan adlarından model):
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()
Senin URLconf geçmek için Değiştir'': yerine 'model': ("my_app.yani olacak genel create_object görünümüne Ürün ProductForm form_class formlar" yerine "my_app.bu ProductForm al modelleri ithal Ürün", elbette).
Şablon Başkanı. {{ form.medya }} bağlantılar Javascript dosyaları için. çıkış için
Ve hacky bölüm: zaman widget/admin tarih i18n JS şeyler yüklendi, ve ayrıca core.js ama ikisinden birini otomatik olarak vermeyin gerektiren olmalısınız. Şablonunda çok {{ form.yukarıda medya }} ihtiyacınız olacak:
<script type="text/javascript" src="/my_admin/jsi18n/"></script> <script type="text/javascript" src="/media/admin/js/core.js"></script>
Ayrıca aşağıdaki admin CSS (teşekkürler Alex bu söz için) kullanmak isteyebilirsiniz:
<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 yönetici medya (ADMİN_MEDİA_PREFİX) / - kurulum için bunu değiştirebilirsiniz/admin/ media altında olduğunu ima eder. İdeal bir bağlam işlemci şablonu için bu değerleri aktarmak için hardcoding yerine kullanmak istiyorum, ama bu sorunun kapsamı dışındadır.
Bu da /my_admin/jsi18n/ URL el ile django için kablolu olması gerekir.manzarası.i18n.görünüm (veya eğer İ18N kullanarak değilse null_javascript_catalog) javascript_catalog. Bu kendini yönetici uygulama yerine yapmanız gereken erişilebilir yönetici (teşekkürler bu işaret için 16**) oturum bakılmaksızın. Senin URLconf için kod örneği:
(r'^my_admin/jsi18n', 'django.views.i18n.javascript_catalog'),
Eğer Django 1.2 veya sonraki bir sürümünü kullanıyorsanız son olarak, şablon bazı ek kod parçacıkları kendi medya bulmanıza yardımcı olmak için ihtiyacınız:
{% 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>
Teşekkürler 17* *Bu ek için.
Yerel tarih zaman JavaScript kullanara...
Nasıl Oracle SQL Geliştirici özel tari...
Joda kullanarak Tarih Ve Saat birden b...
Otomatik oluşturma django model form n...
Nasıl PHP kullanarak iki tarih arasınd...