web-dev-qa-db-fra.com

Quel est le datepicker le plus propre et le plus simple à obtenir dans Django?

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?

32
Michael Morisy

Vous pouvez également simplement utiliser Jquery dans vos modèles. Le sélecteur DateTime jQuery permet chaque personnalisation.

http://jqueryui.com/demos/datepicker/

18
Ali

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:

 enter image description here

29
avi

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'}))
14
Ten

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.

bootstrap datepicker

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 .

6
Munim Munna

É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>
2
J. Hacker

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.

2
KindOfGuy

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'}),
        }
2
Andy Ward

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',
]
0
Viswanathan L

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>
0

Utilisez datetime-local comme type pour l'entrée.Il n'est pas très élégant

J'espère que cela t'aides.  enter image description here

0
allsyed

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.

0
AndrewRM