J'adore le Thauber Schedule datepicker , mais c'est un sélecteur de date/heure et je ne parviens pas à le faire simplement. Des recommandations pour les datepickers à la recherche de Nice qui viennent avec des instructions sur la façon d’intégrer un champ de formulaire de date Django?
Vous pouvez également simplement utiliser Jquery dans vos modèles. Le sélecteur DateTime jQuery permet chaque personnalisation.
Voici ce que je fais, pas de dépendances externes du tout:
models.py:
from Django.db import models
class Promise(models):
title = models.CharField(max_length=300)
description = models.TextField(blank=True)
made_on = models.DateField()
forms.py:
from Django import forms
from Django.forms import ModelForm
from .models import Promise
class DateInput(forms.DateInput):
input_type = 'date'
class PromiseForm(ModelForm):
class Meta:
model = Promise
fields = ['title', 'description', 'made_on']
widgets = {
'made_on': DateInput(),
}
mon avis:
class PromiseCreateView(CreateView):
model = Promise
form_class = PromiseForm
Et mon template:
<form action="" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Create" />
</form>
Le sélecteur de date ressemble à ceci:
Django's TextInput widget (et toutes ses sous-classes) prend en charge la spécification d'un attribut type pour définir le type de formulaire.
Vous pouvez l'utiliser pour définir le type d'entrée sur date
( Spécification W3C ), par exemple de la manière suivante:
date = fields.DateField(widget=forms.widgets.DateInput(attrs={'type': 'date'}))
En ce qui concerne les sélecteurs de dates, mon choix est Bootstrap Datepicker . Vous pouvez l'implémenter dans votre application Django en utilisant Django-bootstrap-datepicker-plus }, qui fonctionne à la fois sur les versions plus récentes et plus anciennes de Django. Je maintiens le référentiel et le teste dans Django version 1.8, 1.10, 1.11 et 2.0.4.
L'installation est assez facile. Vous venez de l'installer.
pip install Django-bootstrap-datepicker-plus
Importez le widget dans votre fichier forms.py
from bootstrap_datepicker_plus import DatePickerInput
Ajouter le widget à votre champ de date
class ToDoForm(forms.Form):
date = forms.DateField(
widget=DatePickerInput(
options={
"format": "mm/dd/yyyy",
"autoclose": True
}
)
)
Des instructions détaillées sont disponibles sur Django-bootstrap-datepicker-plus Page Github .
Disclaimer: Ce paquet de widgets est maintenant possédé et maintenu par moi. Pour tous les problèmes, n'hésitez pas à ouvrir des problèmes sur la Github Page .
Étant nouveau pour le codage, j’ai utilisé cet exemple pour sa facilité.
<form method="POST">{% csrf_token %}
<p>Start date<input type = 'date' name='start_date' ></p>
<p>End date<input type = 'date' name='end_date' ></p>
<button type="submit">Submit</button>
</form>
J'ai trouvé cela assez lisse pour une option DateTimeField
conviviale https://github.com/asaglimbeni/Django-datetime-widget
Nécessaire pour inclure le fichier css bootstrap-timepicker de malot et cela a fonctionné assez proprement.
la solution d'avi peut également être réalisée sans utiliser une classe d'entrée Django supplémentaire:
class PromiseForm(ModelForm):
class Meta:
model = Promise
fields = ['title', 'description', 'made_on']
widgets = {
'made_on': DateInput(attrs={'type': 'date'}),
}
C'est ce que je fais pour obtenir datepicker dans les formulaires Django.
installez bootstrap_datepicker_plus à l'aide de la commande pip.
pip installer Django-bootstrap_datepicker_plus
forms.py
from .models import Hello
from Django import forms
from bootstrap_datepicker_plus import DatePickerInput
class CreateForm(forms.ModelForm):
class Meta:
model = Hello
fields =[
"Date",
]
widgets = {
'Date': DatePickerInput(),
}
settings.py
INSTALLED_APPS = [
'bootstrap_datepicker_plus',
]
C'est ce qui a fonctionné pour moi . J'utilise Django 1.11 avec bootstrap 3.3.
Form.py
from Django.contrib.admin.widgets import AdminDateWidget
class AddInterview(forms.ModelForm):
class Meta:
model = models.Interview
fields = ['candidate', 'date', 'position', 'question_set']
date = forms.DateField(widget=AdminDateWidget())
Modèle:
<form method="post">
<div class="form-group">
{% csrf_token %}
{{ form.media }}
{{ form.as_p }}
<p>Note: Date format is yyyy-mm-dd</p>
</div>
CSS: (Dans le même fichier de modèle html ci-dessus)
<link rel="stylesheet" type="text/css" href="{% static 'admin/css/forms.css' %}"/>
<link rel="stylesheet" type="text/css" href="{% static 'admin/css/widgets.css' %}"/>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" >
JS: (Dans le même fichier de modèle html ci-dessus)
<script type="text/javascript" src="/admin/jsi18n/"></script>
<script type="text/javascript" src="{% static 'admin/js/core.js' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/admin/RelatedObjectLookups.js' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/vendor/jquery/jquery.min.js' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/jquery.init.js' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/actions.min.js' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/calendar.js' %}"></script>
<script type="text/javascript" src="{% static 'admin/js/admin/DateTimeShortcuts.js' %}"></script>
Je me débattais avec un problème similaire et j’ai trouvé la solution suivante agréable en utilisant des formes de disquette:
Cela fonctionne vraiment bien et est relativement facile à mettre en œuvre, espérons que quelqu'un trouvera l'aide complète. Bonne chance.