[Django] Validation de date d'un formulaire

Messages postés
1
Date d'inscription
vendredi 19 août 2016
Statut
Membre
Dernière intervention
19 août 2016
-
Bonjour,
Je vous présente mon problème :
Je suis entrain d'apprende sur le framework python django(les cours du site du zero). Je suis sous Django 1.8.4 avec python 3.
Mon probleme se trouve au niveau des formulaire : j'ai un formulaire d'un modele avec un champ DateField.
Ce champ doit etre renseigné par l'utilisateur. Le probleme est au niveau de la validation :

-Si je rentre une date de type 19/08/16, django lors de la validation sort une erreur : "ValidationError" avec pour raison : ["Le format de date de la valeur «\xa00000/00/00\xa0» n'est pas valide. Le format correct est AAAA-MM-JJ."].

-Si je rentre une date de type 2016-08-19 ( comme demandé par django précedemment), le formulaire m'écrit : "Saisissez une date valide."

J'ai cherché parmi beaucoup de forum et testé plusieur solution(filtre, widget ,localize), sans succes.

Voici mon code :
models.py ( les ForeignKey sont bien renseigné et marchent très bien, donc le probleme ne vient pas de là)
-------------------------------------------------------------------------
class Commande(models.Model):

 intitule = models.CharField(max_length=100)
 montant = models.DecimalField(max_digits=9, decimal_places=2)
 echeance = models.DateField(auto_now_add=False, auto_now=False, verbose_name="Date d'echeance")
 po = models.CharField(max_length=100)
 livraison = models.DateField(auto_now_add=False, auto_now=False, verbose_name="Date de livraison")
 etat = models.BooleanField()
 fact = models.BooleanField()

 client = models.ForeignKey('Client')
 mois = models.ForeignKey('Mois')

 def __str__(self):
  return self.intitule

-------------------------------------------------------------------------



forms.py (le filtre est en commentaire car il ne sert a rien)
-------------------------------------------------------------------------
import datetime
import time
from django import forms
from gestion_facture.models import Commande



class CommandeForm(forms.ModelForm):



    #def clean_echeance(self):
        #echeance = self.cleaned_data['echeance']
        #try:
            #time.strptime(echeance, '%Y-%m-%d')
        #except:
            #raise forms.ValidationError("Date non valide ! format : YYYY-mm-dd")

        #return echeance

    class Meta:
        model = Commande
        exclude = ['livraison', 'etat', 'fact']

------------------------------------------------------------------------


views.py :
-------------------------------------------------------------------------
def add_commande(request):
    if request.method == 'POST':  
     form = CommandeForm(request.POST)
     if form.is_valid():
      envoi = True
      commande = form.save(commit=False)
      commande.etat = False
      commande.fact= False
      commande.livraison = '0000/00/00'
      commande.save()


    else: # Si ce n'est pas du POST, c'est probablement une requête GET
        form = CommandeForm()  # Nous créons un formulaire vide

    return render(request, 'gestion_facture/add-commande.html', locals())


-------------------------------------------------------------------------

J'ai eu l'idée de supprimer le filtre de base de django sur le champ echeance (celui qui pose probleme) mais je n'ai aucune idée comment faire.
Sinon, autre petit détail : n'y aurait-il pas une maniere de mettre le champ en input="date" pour avoir un champ avec un petit calendrier ?(fonctionne sur google chrome)

Merci d'avance de votre aide,


Jbdo99

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ICI

Merci d'y penser dans tes prochains messages.
Afficher la suite