Django 1.10 - Formset重新填充已删除的项目

时间:2017-04-13 13:17:38

标签: django django-forms

我使用Formset建立了can_delete=trueFormset工作正常。问题是重新填充表单,因为在提交之后,用户被重定向到同一表单页面上。我错误的是,删除的项目仍然保留在表单中,即使它在DB中不再存在。

我的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 个答案:

答案 0 :(得分:1)

成功提交表单后,您应该重定向(即使它是相同的URL)。这样可以防止重复提交。重定向后,重新加载formset时不会显示已删除的项目。

from django.shortcuts import redirect

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