2010-10-26 9 views
0

J'ai une forme suivante:formulaire ne permet pas de modifier

class PlayForwardPageForm(forms.ModelForm):   
    def __init__(self, *args, **kwargs): 
     super(PlayForwardPageForm, self).__init__(*args, **kwargs) 

    class Meta: 
     model = PlayForwardPage 
     exclude = ('id',) 

    def save(self, *args, **kwargs):  
     post = super(PlayForwardPageForm, self).save(*args, **kwargs) 
     post.save() 

et estime que le montre:

object = PlayForwardPage.objects.all()[0] 
form = PlayForwardPageForm(instance=object) 

if request.method == "POST": 
    form = PlayForwardPage(data=request.POST, instance=object) 
    if form.is_valid(): 
     form.save() 
     return HttpResponseRedirect(reverse('manage_playforward',)) 
else: 
    form = PlayForwardPageForm(instance=object) 

Quand tout page de chargement fonctionne très bien. Mais lorsque je tente de sauvegarder le formulaire avec les données modifiées je reçois:

'data' is an invalid keyword argument for this function

Quelqu'un peut-il voir une raison ou ce comportement?

Répondre

1

Réponse courte: est un modèle pas un ModelForm.

Voici le code corrigé, avec quelques commentaires de style supplémentaires.

# Don't shadow built-ins (in your case "object") 
play_forward_page = PlayForwardPage.objects.all()[0] 
# Don't need this form declaration. It'll always be declared below. form = PlayForwardPageForm(instance=object) 

if request.method == "POST": 
    # Should be a the form, not the model. 
    form = PlayForwardPageForm(data=request.POST, instance=play_forward_page) 
    if form.is_valid(): 
     form.save() 
     return HttpResponseRedirect(reverse('manage_playforward',)) 
else: 
    form = PlayForwardPageForm(instance=play_forward_page) 

, vous aussi faire des choses inutiles dans votre PlayForwardPageForm:

class PlayForwardPageForm(forms.ModelForm):   

# This __init__ method doesn't do anything, so it's not needed. 
# def __init__(self, *args, **kwargs): 
#  super(PlayForwardPageForm, self).__init__(*args, **kwargs) 

    class Meta: 
     model = PlayForwardPage 
     exclude = ('id',) 

# You don't need this since you're not doing anything special. And in this case, saving the post twice. 
# def save(self, *args, **kwargs):  
#  post = super(PlayForwardPageForm, self).save(*args, **kwargs) 
#  post.save() 
Questions connexes