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
[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.