如何在Django中提交后清除表单字段

时间:2011-04-24 21:41:12

标签: python django django-forms

我有这个:

def profile(request, username):
if request.method == 'POST':
    if request.user.is_authenticated():
        new_message = Message(author = request.user)
        form = MessagesForm(request.POST, instance = new_message)
    else:
        form = MessagesForm(request.POST)
    if form.is_valid():
        form.save()
else:
    to_user = User.objects.get(username = username)
    form = MessagesForm(initial = {'user': to_user.pk})


return render(request, "profile.html", {'username': username, 'form': form, 'messages': messages})

此表单提交消息并返回相同的页面。我的问题是,提交后我再次看到我的字段充满了我的信息。如何在提交后清除它?

6 个答案:

答案 0 :(得分:23)

在表单提交后重定向是标准的,以防止重复。

成功后,只需将重定向返回到表单。

if form.is_valid():
    form.save()
    return http.HttpResponseRedirect('')

答案 1 :(得分:20)

保存表单而不是显示post dict后指定空表单

form = EmployeeForm()
    if request.method == "POST":
        pDict = request.POST.copy() 
        form = EmployeeForm(pDict) #if not valid shows error with previous post values in corresponding field
        if form.is_valid():
            form.save()
            form = EmployeeForm() # show empty form no need to give HttpResponseRedirect()

答案 2 :(得分:2)

save()之后,您可以使用MessagesForm(request.GET)值返回“表单”键。

return render(request, "profile.html", {
        'username': username,
        'form': MessagesForm(request.GET),
        'messages': messages,
    })

答案 3 :(得分:0)

通常,您可以在保存数据后初始化相同的空表单:

if request.method == "POST":
    rf = RegistrationForm(request.POST)
    if rf.is_valid():
        print 'Saving datas..'
        #logic to save datas
        rf = PreRegistrationForm()
        return render_to_response('registration/confirmation_required.html', {'settings': settings}, context_instance=RequestContext(request))

答案 4 :(得分:0)

在@Karthikkumar的答案中尝试使用HttpResponseRedirect('/')代替HttpResponseRedirect(''),尤其是在主视图是空路径的情况下,例如在urls.py文件中:

urlpatterns = [path('',views.home_view),]

我遇到了与上述问题类似的问题,其中HttpResponseRedirect('')将我引导到空白页。让我知道添加斜线是否对您有用!

答案 5 :(得分:0)

您可以使用此:

Sometimes you can use this idea take attrs={ "autocomplete":"off"} for each inputs.