Je crée un formulaire de connexion utilisateur avec un modèle CustomUser dérivé de AbstractUser, avec un champ supplémentaire: date_of_birth. J'utilise CreateView pour générer le formulaire. Tous les champs s'affichent, le champ de mot de passe utilise le widget de mot de passe comme prévu (affichant des points au lieu de caractères), mais le champ de date ne le fait pas (champ de caractères simples sans mise en forme ni calendrier). Qu'est-ce que je néglige?
models.py:
from django.views.generic.edit import CreateView from .models import CustomUser from .forms import CustomUserForm # Create your views here. def index(request): return HttpResponse("Hello, world") class CustomUserCreate(CreateView): model = CustomUser form_class = CustomUserForm
forms.py:
from .models import CustomUser class CustomUserForm(forms.ModelForm): class Meta: model = CustomUser fields = ["username", "password", "first_name", "last_name", "email", "date_of_birth"] widgets = { "password": forms.PasswordInput(), "date_of_birth": forms.DateInput() }
views.py:
from django.urls import reverse from django.contrib.auth.models import AbstractUser # Create your models here. class CustomUser(AbstractUser): date_of_birth = models.DateField(verbose_name="Date of Birth", blank=True, null=True) def get_absolute_url(self): return reverse('index') def __str__(self): return self.username
3 Réponses :
Django n'a pas de sélecteur de date intégré. DateField utilise le widget DateInput qui n'est qu'un saisie de texte
.
Merci vaudou-burger de m'avoir pointé dans la bonne direction. J'ai trouvé une vidéo avec une solution très simple pour utiliser le sélecteur de date HTML5: https: // www .youtube.com / watch? v = I2-JYxnSiB0 .
Il suffit d'ajouter ce qui suit à forms.py:
class DateInput(forms.DateInput): input_type = 'date'
, puis d'utiliser ceci comme widget (remplacez donc forms.DateInput () par DateInput ()).
Heureux d'avoir pu aider!
Si vous venez ici en 2020 et au-delà, remplacez simplement l'entrée par défaut type = text
en utilisant 'type' : 'date'
Donc, quelque chose comme ci-dessous fonctionnerait. Testé sur Mozilla Dev Edition 73. +
'date_of_birth': forms.DateInput(attrs={'class':'form-control', 'type':'date'}),
Vous avez raison, ça marche! Est également décrit dans la documentation: docs.djangoproject .com / fr / 3.0 / ref / forms / widgets /…
Sur quel navigateur testez-vous? Découvrez ceci .