2017-04-13 84 views
0

我構建了Formsetcan_delete=trueFormset工作正常。問題是重新填充表單,因爲提交後,用戶被重定向到同一個表單頁面上。什麼讓我感到困惑,即使它在數據庫中不再存在,被刪除的項目仍然保留在表單中。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

成功的表單提交後,你應該重定向(即使是同一網址)。這將防止重複提交。重定向之後,當formset重新加載時,刪除的項目不會出現。

from django.shortcuts import redirect 

def submit(request): 
    ... 
    if book_formset.is_valid(): 
     book_formset.save() 
     return redirect('/success_url/')