Estoy usando Django ModelForms para crear un formulario. Tengo mi formulario configurado y funciona bien.Django Formas con get_or_create
form = MyForm(data=request.POST)
if form.is_valid():
form.save()
Lo que ahora quiero sin embargo es que el formulario verifique primero si existe un registro idéntico. Si lo hace, quiero que obtenga el id de ese objeto y, si no, quiero que lo inserte en la base de datos y luego me proporcione la identificación de ese objeto. ¿Es esto posible usar algo como:
form.get_or_create(data=request.POST)
sé que podría hacer
form = MyForm(instance=object)
al crear la forma, pero esto no funcionaría, ya que todavía quiere tener el caso en que no hay una instancia de una objetar
edición:
decir que mi modelo es
class Book(models.Model):
name = models.CharField(max_length=50)
author = models.CharField(max_length=50)
price = models.CharField(max_length=50)
Quiero un formulario que alguien pueda completar para almacenar libros. Sin embargo, si ya hay un libro en el db que tiene el mismo nombre, autor y precio, obviamente no quiero que este registro se vuelva a agregar, así que solo quiero encontrar su identificación y no agregarla.
Sé que hay una función en Django; get_or_create que hace esto, pero ¿hay algo similar para los formularios? o tendría que hacer algo como
if form.is_valid():
f = form.save(commit=false)
id = get_or_create(name=f.name, author=f.author, price=f.price)
Gracias
Parece un buen enfoque, pero realmente no sigues el '** form.cleaned_data' bit. Específicamente, ¿para qué son **? ¿Alguien puede elaborar? –
el '**' descomprime el diccionario. ver: http://docs.python.org/tutorial/controlflow.html#unpacking-argument-lists –
@rz: Gracias por la aclaración. –