2010-10-25 5 views
1

J'essayais de passer un paramètre supplémentaire à mon formulaire, qui est une relation d'objet à ForeignKey. Mais ne sais pas pourquoi la forme retourne __init__() got an unexpected keyword argument 'parent' quand je suis assez sûr qu'il est possible d'envoyer des paramètres supplémentaires à de la forme (c'est à dire ici: Simple form not validating). Ai-je tort ?Le formulaire n'accepte pas les paramètres supplémentaires

def add_video(request): 
    parent = ParentObject.objects.all()[0] 
    if request.method == 'POST': 
     form = VideoForm(data=request.POST, parent=parent) 
     if form.is_valid(): 
      form.save()    
      next = reverse('manage_playforward',) 
      return HttpResponseRedirect(next) 
    else: 
     form = VideoForm() 

class VideoForm(forms.ModelForm):  

    def __init__(self, *args, **kwargs): 
     try: 
      self.parent = kwargs.pop['parent'] 
      logging.debug(self.parent) 
     except: 
      pass  
     super(VideoForm, self).__init__(*args, **kwargs) 

Répondre

6

kwargs.pop['parent'] jette TypeError: 'builtin_function_or_method' object is unsubscriptable, parce que vous essayez de faire une recherche de clé sur une méthode de fonction ({}.pop). Cette erreur est ensuite avalée par votre gestionnaire d'exceptions.

Pour que cela fonctionne, faites kwargs.pop('parent', None). Dans votre cas:

class VideoForm(forms.ModelForm):  
    def __init__(self, *args, **kwargs): 
     self.parent = kwargs.pop('parent', None) 
     super(VideoForm, self).__init__(*args, **kwargs) 

Comme une note de côté, 99% du temps de son mieux pour attraper que des exceptions spécifiques à l'exception de votre blocs. Cela permettra d'éviter les bugs/confusion comme ça. En outre, je suggère fortement d'ajouter des tests unitaires pour cette construction personnalisée (ou juste TDDing votre autre code, mais c'est un problème distinct)

+0

Oui, le code d'origine est plutôt une leçon d'objet en ce sens que c'est une mauvaise idée d'utiliser nu des exceptions. –

Questions connexes