2011-04-24 111 views
14

提交我有這樣的:如何清除表單字段後,在Django

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

這種形式提交信息並返回相同的頁面。我的問題是,在提交後我再次看到我的領域充滿了我的信息。提交後如何清除它?

回答

19

表單提交後重定向以防止重複的標準。

只需在成功時返回一個重定向到您的表單。

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

Whai不做重定向? - 在Django-CMS中作爲網站插件的形式。有什麼不同的方法嗎? – tunarob 2012-12-05 01:25:28

+0

@ robos85,不知道你在這裏是什麼意思。如果你不通過django來做,那就在客戶端做。 – 2012-12-05 01:28:07

+0

我知道這是舊的。但是當我嘗試使用'HttpResponseRedirect('')'時,在提交後我得到一個空白的白頁。該表格已成功提交。我在Django 1.11 – Valachio 2017-11-19 00:06:32

15

節約形式,而不是展示後字典後分配空形式

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

通常你可以初始化同一個空的形式已保存DATAS後:如果我能

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)) 
+2

實際上按F5或重新加載頁面將發送以前提交的數據,而不是空白表格。所以重定向到另一個網址是最好的出路。 – Peter 2015-06-11 15:34:18