2011-04-24 27 views
14

tengo esto:Cómo limpiar los campos de formulario después de un envío En 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}) 

Esta forma presentara un mensaje y regresar la misma página. Mi problema es que después del envío veo nuevamente mi campo lleno de mi información. ¿Cómo borrarlo después del envío?

Respuesta

19

Es estándar para redirigir después del envío del formulario para evitar duplicados.

Simplemente devuelva una redirección a su formulario en caso de éxito.

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

Whai si puedo no redirigir? - Formulario como complemento del sitio en Django-CMS. ¿Hay alguna manera diferente? – tunarob

+0

@ robos85, no estoy seguro de lo que quiere decir aquí. Si no lo haces a través de django, hazlo en el lado del cliente. –

+0

Sé que esto es viejo. Pero cuando intento usar 'HttpResponseRedirect ('')', aparece una página blanca en blanco después del envío. El formulario se envió correctamente sin embargo. Estoy en Django 1.11 – Valachio

15

Después de guardar formulario en lugar de mostrar dict colocar asignar la forma vacía

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

Por lo general, se puede inicializar la misma forma vacía después de haber guardado 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

En realidad presionar F5 o volver a cargar la página enviará los datos enviados anteriormente, no un formulario en blanco. Por lo tanto, redirigir a otra url es la mejor manera de salir. – Peter

Cuestiones relacionadas