Widget calendrier Django sous forme personnalisée
j'essaie d'ajouter une date de calendrier à l'un de mes formulaires. Il y a un merveilleux widget de calendrier que Django utilise sur ses pages d'administration, mais je n'arrive pas à trouver comment l'ajouter à un formulaire personnalisé.
j'ai trouvé quelques autres questions sur le même sujet ici, mais elles semblaient toutes périmées, compliquées, et ne pas fonctionner.
y a-t-il un moyen d'inclure le widget calendrier de Django dans l'un de mes formulaires?
5 réponses
au lieu du widget administrateur, envisagez d'utiliser le "SelectDateWidget" normal intégré dans Django:https://docs.djangoproject.com/en/1.8/ref/forms/widgets/#selectdatewidget
Je l'ai compris, grâce à Dave S. et un certain nombre de vieux billets sur ce sujet. Ma méthode:
Créer un formulaire personnalisé.
en haut, importez les widgets admin en utilisant from django.contrib.admin.widgets import AdminDateWidget
. Ensuite, ajoutez les différents champs de votre formulaire, en utilisant my_field = DateField(widget = AdminDateWidget)
chaque fois que vous voulez utiliser le widget date.
Créer votre modèle de formulaire
placer ce qui suit vers le haut pour inclure les fichiers CSS/js appropriés:
{% load i18n admin_modify adminmedia %}
{% block extrahead %}{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/base.css" />
<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/widgets.css" />
<script type="text/javascript" src="/jsi18n/"></script>
<script type="text/javascript" src="{% admin_media_prefix %}js/core.js"></script>
{{ form.media }}
{% endblock %}
Note: Vous n'avez pas nécessairement besoin de tout cela, en fonction de votre version de Django et de la façon dont vous mettez en œuvre les champs de formulaire. c'est ce que j'ai trouvé que j'avais besoin d'utiliser les widgets.
maintenant, il suffit de sortir votre formulaire comme normal, et le JS devrait automatiquement le convertir en champ date. Profitez-en!
tous les widgets utilisés par django-admin sont dans le django/contrib/admin/widgets.py file. Il suffit d'utiliser cela comme un widget habituel dans une forme. Ce que vous voulez est AdminDateWidget.
from django.contrib.admin.widgets import AdminDateWidget
from django.forms.fields import DateField
class MyForm(Form):
my_field = DateField(widget=AdminDateWidget)
qui va créer une date-picker avec calendrier. Vous pouvez essayer de le personnaliser à ce que vous avez besoin en l'étendant ou créer un nouveau widget à partir d'une égratignure avec une inspiration de AdminDateWidget.
Vous pouvez le faire par le widget de forme "SelectDateWidget ()" comme cet exemple:
class MyForm(forms.Form):
start_date=forms.DateField(widget = forms.SelectDateWidget())
end_date=forms.DateField(widget = forms.SelectDateWidget())
il s'agit essentiellement d'un duplicata de utilisation des widgets Django time/date sous forme personnalisée.
la réponse a été donnée par @Dave S et @MrGlass, mais pour Django 1.2 et plus tard, cela sera également nécessaire pour aider le JavaScript à trouver le média d'administration:
{% 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>