2009-01-09 25 views

Respuesta

9

Si no tiene la intención de su usuario sea capaz de cambiar algo en un formulario, a continuación, en su lugar debe colocarlo en la URL o algún otro contexto. Te estás abriendo a problemas de seguridad (o al menos casos de uso extra) de lo contrario.

En el urls.py:

(r'^edit/?P<my_id>[\d]+)/$', views.edit), 

y en view.py:

from django.shortcuts import render_to_response, get_object_or_404 
from models import MyModel 

def edit(request, my_id): 
    obj = get_object_or_404(MyModel, id=my_id) 
    if request.POST: 
     form = MyForm(request.POST, instance=obj) 
     if form.is_valid(): 
      form.save() 
      # 
      # do other stuff.... 
      # 
    else: 
     form = MyForm(instance=obj) 

    return render_to_response(template_name, { 
     "form": form 
    }, context_instance=RequestContext(request)) 
+0

Me gusta lo que has hecho aquí. ¿Tiene alguna idea sobre cómo ocultar varios campos en el formulario HTML representado? Tengo la sensación de que necesito cambiar a usar formssets (o dejar de usar ModelForms) para obtener la granularidad que quiero:/ – neoice

+0

Bueno, si son todos valores que el usuario no puede cambiar, también pueden ir en la url: '(r '^ editar /? P [\ d] +) /? P [.] +/$', views.edit)'. De lo contrario, en ModelForms establece el widget de cada campo en HiddenInput (o establece el estilo de visualización del widget existente en 'none'.) –

+0

¿Qué harías si el formulario está creando la instancia del modelo? –

Cuestiones relacionadas