formularios - ¿Cómo actualizar un objeto desde el formulario de edición en Django?
modelform django (2)
Posiblemente sea una pregunta para novatos, así que por favor tengan paciencia conmigo.
Tengo un formulario de Django que edita una cierta instancia de un Modelo. Para saber qué objeto se está editando, tengo un campo oculto que contiene el ID del objeto, junto con la URL que contiene el ID.
Primera pregunta : ¿Tener la identificación del objeto en un campo oculto es la forma correcta de hacerlo?
Mi (posiblemente infundada) preocupación por tenerlo solo como parte de la url es que alguien podría abrir la página de una identificación de objeto, enviarla a otra y ese objeto se sobrescribirá. Es por eso que estoy tratando de usar un campo oculto.
El problema con el almacenamiento de la identificación en un campo oculto es que, al validar el formulario, Django se queja de que el objeto no tiene una identificación única (obviamente).
Segunda pregunta : si un campo único es parte de un formulario, ¿cómo se le puede decir a Django que ignore el hecho de que esa clave ya existe para actualizar el objeto?
¿Por qué no solo usas ModelForm?
# forms.py
# ...
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
# views.py
# ...
def my_view(request, id):
instance = get_object_or_404(MyModel, id=id)
form = MyForm(request.POST or None, instance=instance)
if form.is_valid():
form.save()
return redirect(''next_view'')
return render(request, ''my_template.html'', {''form'': form})
Actualización para Django 1.6 y otra versión
# forms.py
# ...
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
# views.py
def my_view(request, id):
instance = MyModel.objects.get(id=id)
form = MyForm(request.POST or None, instance=instance)
if form.is_valid():
form.save()
return redirect(''next_view'')
return direct_to_template(request, ''my_template.html'', {''form'': form})