Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Como establecer por default un atributo que no sea en el modelo?

Estas en el tema de Como establecer por default un atributo que no sea en el modelo? en el foro de Python en Foros del Web. Si por ejemplo en el siguiente modelo yo quisiera que a través de un ModelForm el usuario llene los datos del contacto excepto el tipo ...
  #1 (permalink)  
Antiguo 08/02/2013, 13:28
 
Fecha de Ingreso: enero-2011
Ubicación: Valledupar, Colombia
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Como establecer por default un atributo que no sea en el modelo?

Si por ejemplo en el siguiente modelo yo quisiera que a través de un ModelForm el usuario llene los datos del contacto excepto el tipo de contacto, ya que el tipo se lo quiero dar yo por default. Como podría poner por default el tipo sin que sea en el modelo? Se puede a través del ModelForm ó la vista? y como sería?

Código:
TIPO_CONTACTO_CHOICES = (
    (1, _('Proveedor')),
    (2, _('Cliente')),
    (3, _('Colaborador')),
)


class Contacto(models.Model):
    """docstring for ContactoEmpresa"""

    nombre = models.CharField(_('empresa'), max_length=80)
    email = models.EmailField(_('email'), max_length=75, blank=True)
    celular = models.CharField(_('celular'), max_length=20, blank=True)
    pais = models.CharField(_('pais'), max_length=255, blank=True)
    tipo = models.PositiveSmallIntegerField(_('tipo contacto'),
                                              choices=TIPO_CONTACTO_CHOICES,
                                              blank=True,
                                              null=True)
  #2 (permalink)  
Antiguo 08/02/2013, 13:52
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 14 años, 10 meses
Puntos: 1329
Respuesta: Como establecer por default un atributo que no sea en el modelo?

Se puede hacer en la vista, al momento de crear el model form, dándole datos iniciales.:

Código Python:
Ver original
  1. # Suponiendo que tu modelform es ContactoForm
  2. form = ContactoForm(initial={'tipo': 'Proveedor'})

Saludos
__________________
Grupo Telegram Docker en Español
  #3 (permalink)  
Antiguo 08/02/2013, 22:48
 
Fecha de Ingreso: enero-2011
Ubicación: Valledupar, Colombia
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Respuesta: Como establecer por default un atributo que no sea en el modelo?

Cita:
Iniciado por Carlangueitor Ver Mensaje
Se puede hacer en la vista, al momento de crear el model form, dándole datos iniciales.:

Código Python:
Ver original
  1. # Suponiendo que tu modelform es ContactoForm
  2. form = ContactoForm(initial={'tipo': 'Proveedor'})

Saludos
traté de adaptar eso a mi vista y no me funcionó, me guarda un valor Null ó en ocasiones me aparece que los datos son invalidos y no se salva

Última edición por akike; 08/02/2013 a las 23:04
  #4 (permalink)  
Antiguo 09/02/2013, 00:36
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 14 años, 10 meses
Puntos: 1329
Respuesta: Como establecer por default un atributo que no sea en el modelo?

Habría que ver el código para ver que pasa.

Saludos
__________________
Grupo Telegram Docker en Español
  #5 (permalink)  
Antiguo 10/02/2013, 22:02
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 17 años, 10 meses
Puntos: 1360
Respuesta: Como establecer por default un atributo que no sea en el modelo?

Solución para el problema originalmente planteado.

1.- Usas exclude en el ModelForm.
2.- Hacer un override en el metodo save del ModelForm para asignarle la opción que tu quieras antes de ejecutar el save.
  #6 (permalink)  
Antiguo 10/02/2013, 22:08
 
Fecha de Ingreso: enero-2011
Ubicación: Valledupar, Colombia
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Respuesta: Como establecer por default un atributo que no sea en el modelo?

Cita:
Iniciado por razpeitia Ver Mensaje
Solución para el problema originalmente planteado.

1.- Usas exclude en el ModelForm.
2.- Hacer un override en el metodo save del ModelForm para asignarle la opción que tu quieras antes de ejecutar el save.
si uso exclude en el ModelForm, y el 2 no sé como hacerlo
  #7 (permalink)  
Antiguo 10/02/2013, 22:18
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 17 años, 10 meses
Puntos: 1360
Respuesta: Como establecer por default un atributo que no sea en el modelo?

Así, en el model form.

Código Python:
Ver original
  1. def save(self, force_insert=False, force_update=False, commit=True):
  2.     self.instance.tipo = 1 # Para provedor
  3.     return super(ContactoForm, self).save(commit=commit)
  #8 (permalink)  
Antiguo 10/02/2013, 22:29
 
Fecha de Ingreso: enero-2011
Ubicación: Valledupar, Colombia
Mensajes: 7
Antigüedad: 12 años
Puntos: 0
Respuesta: Como establecer por default un atributo que no sea en el modelo?

Cita:
Iniciado por razpeitia Ver Mensaje
Así, en el model form.

Código Python:
Ver original
  1. def save(self, force_insert=False, force_update=False, commit=True):
  2.     self.instance.tipo = 1 # Para provedor
  3.     return super(ContactoForm, self).save(commit=commit)
Esa solución me sirvió de una, muchas gracias :D

Etiquetas: django, forms
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 03:12.