Foros del Web » Programando para Internet » Python »

Objeto debe ser instancia

Estas en el tema de Objeto debe ser instancia en el foro de Python en Foros del Web. Buenas tardes. Mi pregunta es la siguiente, cuando lleno un campo en el template, al momento de dar click en el boton de guardar, me ...
  #1 (permalink)  
Antiguo 23/02/2015, 16:20
 
Fecha de Ingreso: febrero-2014
Ubicación: Hermosillo, Sonora
Mensajes: 86
Antigüedad: 10 años, 9 meses
Puntos: 0
Objeto debe ser instancia

Buenas tardes. Mi pregunta es la siguiente, cuando lleno un campo en el template, al momento de dar click en el boton de guardar, me arroja lo siguiente.

Cannot assign "u'HURTADO PORTILLO IVAN MANUEL'": "ProductoFabricar.nombre_vendedor" must be a "Empleado" instance.

Esto sale al momento de querer guardar los campos que se llenan con autocomplete y que son foreign key a otros modelos.
Pero no tengo idea de como hacerlo una instancia. Si alguien pudiera decirme como. Anexo mi codigo.

VIEW

Código Python:
Ver original
  1. @render_to("ventas/producto_fabricar.html")
  2. def producto_fabricar(request):
  3.     almacen = get_object_or_404(Almacen)
  4.     queryset = ProductoFabricarPapel.objects.none()
  5.  
  6.     if request.method == "POST":
  7.  
  8.         form = ProductoFabricarForm(request.POST)
  9.         formset = ProductoFabricarPapelFS(request.POST, queryset=queryset)
  10.  
  11.         if form.is_valid():
  12.            nombre_vendedor = form.cleaned_data["nombre_vendedor"]
  13.            nombre_coordinador = form.cleaned_data["nombre_coordinador"]
  14.  
  15.            form.save()
  16.            
  17.         if formset.is_valid():
  18.            
  19.             for f in formset.forms:
  20.                 f.instance.producto_fabricar = form.instance
  21.            
  22.             formset.save()
  23.  
  24.             return clean_redirect('reporte_producto_fabricar', success="Se ha guardado correctamente la Orden de Producción")
  25.  
  26.     else:
  27.         form = ProductoFabricarForm()
  28.         formset =  ProductoFabricarPapelFS(queryset=queryset)
  29.  
  30.    
  31.     return { "title":"Agregar Orden de Producción", "form":form, "formset":formset }

MODEL

Código Python:
Ver original
  1. class ProductoFabricar(models.Model):
  2.     TIPOS = (
  3.         ("D/CARTA", 'D/CARTA'),
  4.         ("4/CARTAS", '4/CARTAS'),
  5.         ("OTRO", 'OTRO'),
  6.     )
  7.  
  8.    
  9.     fecha_orden_produccion = models.DateField(auto_now_add=True)
  10.     cotizacion = models.ForeignKey(Movimiento, on_delete=models.PROTECT)
  11.     nombre_producto_fabricar = models.CharField(max_length=350, default='')
  12.     fecha_entrega_acordada = models.DateField(null=True, blank=True)
  13.     fecha_entrega_confirmada = models.DateField(null=True, blank=True)
  14.     criterios_aceptacion = models.CharField(max_length=350, default='')
  15.     cantidad = models.CharField(max_length=255,null=True)
  16.     medida_final = models.CharField(max_length=255,null=True)
  17.     pag_totales = models.CharField(max_length=255,null=True)
  18.     impresion = models.CharField(max_length=255,null=True)
  19.     acabado_1 = models.CharField(max_length=255,null=True)
  20.     acabado_2 = models.CharField(max_length=255,null=True)
  21.     acabado_final = models.CharField(max_length=255,null=True)
  22.     observaciones = models.TextField(blank=True)
  23.     planilla1_frentes = models.IntegerField(null=True)
  24.     planilla2_frentes = models.IntegerField(null=True)
  25.     planilla_vueltas = models.IntegerField(null=True)
  26.     planilla_en = models.CharField(choices=TIPOS, blank=False, default='', max_length=10)
  27.     planilla_en1 = models.CharField(choices=TIPOS, blank=False, default='', max_length=10)
  28.     nombre_vendedor = models.ForeignKey(Empleado, on_delete=models.PROTECT,  related_name="vendedor")
  29.     nombre_coordinador = models.ForeignKey(Empleado, on_delete=models.PROTECT,  related_name="coordinador")
  30.     op = models.PositiveIntegerField(blank=True, null=True)

AUTOCOMPLETE

Código Javascript:
Ver original
  1. $().ready(function(){
  2.  
  3.     $("#id_nombre_vendedor").autocomplete({
  4.         source:"/ajax/contains/empleado/",
  5.         minLength:minLength_ac
  6.  
  7.     });
  8.  
  9. });

Última edición por razpeitia; 23/02/2015 a las 17:11
  #2 (permalink)  
Antiguo 23/02/2015, 17:17
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Objeto debe ser instancia

Pues es porque en tu modelo, nombre_vendedor es llave foránea y como tal espera una instancia a Empleado.
  #3 (permalink)  
Antiguo 23/02/2015, 17:30
 
Fecha de Ingreso: febrero-2014
Ubicación: Hermosillo, Sonora
Mensajes: 86
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Objeto debe ser instancia

ya se que espera una llave foraena, pero la duda que tengo es porque no la esta pasando. si en el form usa autocomplete y al guardar deberia de mandar el id
  #4 (permalink)  
Antiguo 23/02/2015, 21:16
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Objeto debe ser instancia

Es porque obviamente el autocomplete pasa el nombre tal cual y no el id.

Pasa el error completo, con el stacktrace y las variables.
  #5 (permalink)  
Antiguo 24/02/2015, 16:37
 
Fecha de Ingreso: febrero-2014
Ubicación: Hermosillo, Sonora
Mensajes: 86
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Objeto debe ser instancia

Cannot assign "u'HURTADO PORTILLO IVAN MANUEL'": "ProductoFabricar.nombre_vendedor" must be a "Empleado" instance.

nombre_vendedor
u'AVALOS SESMA CYNTHIA GUADALUPE'

ese intente cambiarlo con raw_id_fields pero en el form.is_valid(). no pasa nada simplemente no guarda. no entra a esa parte

Etiquetas: django
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:59.