He creado una buena forma, y una gran y complicada función 'agregar' para manejarla. Se inicia así ...¿Django edita el formulario basado en agregar formulario?
def add(req):
if req.method == 'POST':
form = ArticleForm(req.POST)
if form.is_valid():
article = form.save(commit=False)
article.author = req.user
# more processing ...
Ahora realmente no quieren duplicar toda esa funcionalidad en el método edit()
, por lo que pensé edit
podría utilizar la misma plantilla exacta, y tal vez sólo tiene que añadir un campo a id
el formulario para que la función add
supiera lo que estaba editando. Pero hay un par de problemas con este
- Dónde podría establecer
article.id
en eladd
func? Tendría que ser después deform.save
porque es donde se crea el artículo, pero nunca llegaría a eso, porque el formulario no es válido debido a restricciones únicas (a menos que el usuario lo haya editado todo). Simplemente puedo eliminar la verificaciónis_valid
, pero luego falla elform.save
. - Si el formulario realmente es no válido, el campo I añadido dinámicamente en la función de edición no se conserva.
Entonces, ¿cómo me ocupo de esto?
sí, es un 'ModelForm'. Necesitaba 'commit = False' por otros motivos. Un artículo está compuesto por un montón de cosas (incluidas algunas relaciones m2m). No * creo * que quería trabajar con 'instancia'. Aunque probaré esto. – mpen
En ese caso, sugeriría poner las relaciones de m2m (et al) guardar/validar en el formulario en lugar de la vista ... anular el método guardar o posiblemente, buscar en conjuntos de formularios. Supongo que depende del contexto de con qué estás trabajando ... –
¡Ejemplo genial y minucioso! ¡Gracias! Aprendí más que la solución a esta pregunta. – hobbes3