Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Django] KeyError sur un champ ForeignKey

    11 août 2015 à 14:14:42

    Bonjour à tous 

    Je viens vers vous car je suis face à une erreur dont je ne trouve pas la solution. Je suis actuellement en train de construire une apli de gestion de consommable sous django.

    L'utilisateur saisie différentes informations sur un formulaire pour ajouter un produit au stock, et je suis dans la phase de la gestion d'erreur. Vérifier si les champs sont bien remplie quoi. Dans le cas d'un produit périssable, l'utilisateur doit absolument saisir une date, sinon il doit laisser le champ vide. Pour vérifier si le produit est périssable ou non j'effectue une requête Q à l'aide de la référence saisie en première ligne du formulaire. 

    Mon erreur se situe dans le cas ou je valide le formulaire sans avoir saisie la référence (c'est du test hein pour vérifier que tout marche... ) L'erreur retournée est KeyError. 

    Bon je sais que c'est surement pas très clair, dont voici le code qui, j'espère le sera plus.

    voici un extrait de mon fichier models.py

    class Produit(models.Model): # ce Modèle contient la fiche d'identité du produit.
    	ref = models.CharField(max_length=10,verbose_name="Référence",null=False)
    	designation = models.CharField(max_length=42,verbose_name="Désignation")
    	description = models.CharField(max_length=100, null = True,verbose_name="Déscription", blank=True)
    	limite_cmd = models.IntegerField(null = True, default = 0,verbose_name="Limite de commande")
    	code_Barre = models.CharField(max_length=13,)
    	perim = models.BooleanField(default = False,verbose_name="Produit Périmable ?")
    	unite = models.ForeignKey('Unite',null=True, blank= True)
    	def __str__(self):
    		return self.ref
    
    
    class Stock(models.Model): # ce model contient l'état du stock 
    	ref = models.ForeignKey('Produit',null=False,blank=False,verbose_name='Référence')
    	quantite = models.IntegerField(null=False,blank=False,default=0,verbose_name='Quantité en stock')
    	datePerim = models.DateField(null=True,blank=True,verbose_name='Date de péremption')
    	lieu_stockage = models.ForeignKey('LieuStockage',default='Magasin',verbose_name='Lieu de stockage')
    
    
    class LieuStockage(models.Model):# liste des différents lieu de stockage possible modifiable via la console d'administration.
    	Lieu =models.CharField(max_length=10)
    	def __str__(self):
    		return self.Lieu

    le fichier form.py 

    class AddProductForm(forms.ModelForm):
    	class Meta:
    		model = Stock
    		exclude=()
    
    	def clean_quantite(self):
    		quantite =  self.cleaned_data['quantite']
    		if (quantite<=0):
    			raise forms.ValidationError("Impossible de saisir une quantité négative ou nule")
    		return quantite
    
    	def clean_datePerim(self):
    		datePerim=self.cleaned_data['datePerim']# OK pas de problème ici
    		ref=self.cleaned_data['ref'] #erreur de type "KeyError" sur l'expression 'ref' à cette ligne lorsque rien n'est saisie.
    		if ref != None:
    			#du code et d'autres vérification ....
    		return datePerim

     les valaurs retournée par le POST sont 

    lieu_stockage
    u'1'
    csrfmiddlewaretoken
    u'rkHSQRMuffi2kHf0bu0VoNiXrgtNToF4'
    quantite
    u'0'
    ref
    u''
    datePerim
    u''

    bref si vous avez une idée je suis preneur. 

    Par avance merci 

    • Partager sur Facebook
    • Partager sur Twitter

    [Django] KeyError sur un champ ForeignKey

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown