форма не позволяет редактировать - PullRequest
0 голосов
/ 26 октября 2010

У меня есть следующая форма:

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()

и вид, который показывает это:

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)

При загрузке страницы все работает нормально. Но когда я пытаюсь сохранить форму с измененными данными, я получаю:

'data' is an invalid keyword argument for this function

Кто-нибудь может увидеть какую-либо причину или такое поведение?

1 Ответ

1 голос
/ 26 октября 2010

Краткий ответ: PlayForwardPage это модель, а не ModelForm.

Вот исправленный код с некоторыми дополнительными комментариями по стилю.

# 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)

Кроме того, вы делаете некоторые ненужные вещи в своей 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()
...