2017-04-13 3 views
0

Formsetcan_delete=trueで構築しました。 Formsetは問題なく動作します。問題は、送信後にユーザーが同じフォームページにリダイレクトされるため、フォームを再投入しています。どのようなバグは、それがもはやDBに存在しなくても、削除されたアイテムがフォームに残っているということです。Django 1.10 - Formsetは削除されたアイテムを再移植しました

マイforms.py

class BookForm(forms.ModelForm): 

    class Meta: 
     model = Book 
     fields = ['title', 'description', 'author'] 


BookFormset = forms.modelformset_factory(
    Book, 
    form=BookForm, 
    fields=['title', 'description', 'author'], 
    can_delete=True, 
    extra=1 
) 

提出ビュー機能:私は試した何

def submit(request): 

    book_formset = BookFormset(request.POST) 

    if book_formset.is_valid(): 
     messages.add_message(request, messages.SUCCESS, 'Correct.') 
     book_formset.clean() 
     book_formset.save() 

    else: 
     messages.add_message(request, messages.ERROR, 'Error!') 

    context = { 
     'book_formset': book_formset, 
    } 

    return render(request, 'sand/index.html', context) 

:画面を、以下では

を私はRABIT削除しようとしましたクレイジーbook

スクリーンの前に提出:

enter image description here

画面を後に提出:成功したフォームの送信後

enter image description here

+1

は、 ')あなたは(' book_formset.cleanを呼び出す必要はありません注意してください - これは 'book_formset.is_valid()'呼び出しの一部として自動的に行われます。 – Alasdair

+0

ああ、私はそれを知りませんでした。先端に感謝します。 – Fusion

答えて

1

をあなたはそれが同じURLにいても、(リダイレクトする必要があります)。これにより、重複した提出が防止されます。リダイレクト後、削除されたアイテムは、フォームセットの再読み込み時に表示されません。

from django.shortcuts import redirect 

def submit(request): 
    ... 
    if book_formset.is_valid(): 
     book_formset.save() 
     return redirect('/success_url/') 
関連する問題