2017-10-12 1 views
0

J'ai besoin d'aide pour rendre un sélecteur de date/heure dans mon formulaire au lieu du champ de texte par défaut qui est affiché. J'utilise Django 1.11 et ai suivi la récente solution affichée ici: Django 1.11 - forms.Models: change default form widget for DateTimeField cependantDjango 1.11 - ModelForm: changer le widget de formulaire par défaut pour DateTimeField

Je reçois des erreurs en utilisant le même code. La première erreur que je reçois est: impossible d'importer le nom 'widget'. Je peux passer cette erreur en important 'widgets' à la place. Est-ce que cela a été renommé?

La deuxième erreur que je reçois après avoir renommé les widgets est NameError: le nom 'forms' n'est pas défini. Je peux passer cette erreur en changeant le code à: Class DateInput(widgets.DateInput): Est-ce le traitement correct pour cette erreur?

La troisième erreur que je reçois est: NameError: nom « Date_Input » est pas défini, je peux passer cette erreur en modifiant la dernière pièce de code (enlever soulignement Date_Input) ci-dessus:

widgets = { 
      'missing_date': DateInput() 
     } 

Après ces changements, je ne reçois plus d'erreurs, mais le champ de date dans mon formulaire est toujours rendu comme un champ de texte et non comme un sélecteur de date.

Quelqu'un peut-il jeter plus de lumière sur la solution ci-dessus et pourquoi cela ne fonctionne peut-être pas pour moi? En outre, je voudrais modifier la solution mentionnée dans le lien ci-dessus pour rendre un sélecteur datetime non seulement le sélecteur de date, mais je voulais d'abord tester la fonctionnalité en utilisant le code de la solution post précédente. Merci!

Répondre

0

J'ai fini par résoudre ce en divisant le datetime dans des champs séparés de date et l'heure et en utilisant le code suivant dans forms.py:

class TimeInput(forms.TimeInput): 
    input_type = 'time' 

class DateInput(forms.DateInput): 
    input_type = 'date' 

et dans mon ModelForm Classe:

widgets = { 
     'start_date': DateInput(), 
     'start_time': TimeInput(), 
     'end_date': DateInput(), 
     'end_time': TimeInput(), 
    }