Foros del Web » Programando para Internet » Python »

Agregando atributo class en options de un select (forms.ModelChoiceField + render_opt

Estas en el tema de Agregando atributo class en options de un select (forms.ModelChoiceField + render_opt en el foro de Python en Foros del Web. Buenas !!! Estoy tratando de agregar un atributo class para cada option de un select pero no logro conseguirlo ... La idea es que el ...
  #1 (permalink)  
Antiguo 30/01/2014, 13:34
 
Fecha de Ingreso: marzo-2007
Mensajes: 340
Antigüedad: 17 años, 1 mes
Puntos: 4
Agregando atributo class en options de un select (forms.ModelChoiceField + render_opt

Buenas !!!

Estoy tratando de agregar un atributo class para cada option de un select pero no logro conseguirlo ... La idea es que el valor sea el foreign key (provincia_id) de la tabla ciudad ... necesito si o si poner el identificador de la provincia a la que pertenece la ciudad en el atributo class

Lo que tengo de momento:

Código:
class MySelect(forms.Select):
    def render_option(self, selected_choices, option_value, option_label):
        # look at the original for something to start with
        return u'<option value="%s">%s</option>' % (escape(option_value), conditional_escape(force_unicode(option_label)))
Código:
class PublicarForm(ModelForm):

    DIVISAS = (
        ('ARS', 'Pesos'),
        ('USD', 'Dolares'),
    )

    provincia_id = forms.ModelChoiceField(queryset=Provincia.objects.all())
    #ciudad_id = forms.ModelChoiceField(queryset=Ciudad.objects.all())
    valor_tipo = forms.ChoiceField(choices=DIVISAS, initial='ARS')

    ciudad_id = forms.ModelChoiceField(
        queryset = Ciudad.objects.all(),
        widget = MySelect(attrs = {'adasd': 'mydds'})
        #widget = forms.Select(attrs={'class':'regDropDown'})
    )

    class Meta:
        model = Anuncio
        fields = ['titulo','telefono','valor', 'contenido']
Gracias !!!!
  #2 (permalink)  
Antiguo 31/01/2014, 01:21
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Agregando atributo class en options de un select (forms.ModelChoiceField +

Creo que estas heredando de clase equivocada.
https://github.com/django/django/blo...idgets.py#L477

Incluso si ese no fuera tu error no veo donde le pones los attributos. Tendrías que arreglar eso.

En mi opinión no es problema de python o django, si no mas bien del css y ultimadamente de todo el panorama.

Ejemplo si al select le puedes poner una clase por ejemplo MiClase.

Pondre algo de html/css:

Código HTML:
Ver original
  1. <select class="MiClase">
  2.   <option value="1">1</option>
  3.   <option value="2">1</option>
  4.   <option value="3">1</option>

En css
Código CSS:
Ver original
  1. .MiClase {
  2.   // Mugrero aqui
  3. }
  4.  
  5. // Una clase a cada option? ppuuuffff
  6. // Usa los selectores
  7. .Miclase > option {
  8.   // Mas mugrero
  9. }

0 código extra, 0 complicaciones extras y el trabajo esta hecho.
  #3 (permalink)  
Antiguo 03/02/2014, 00:16
 
Fecha de Ingreso: marzo-2007
Mensajes: 340
Antigüedad: 17 años, 1 mes
Puntos: 4
Respuesta: Agregando atributo class en options de un select (forms.ModelChoiceField +

Claro ... pero necesito un identificador por option ya que lo que quiero hacer es esconder/mostrar opciones segun la eleccion de otro select ... ya le buscare la vuelta, gracias !
  #4 (permalink)  
Antiguo 03/02/2014, 01:57
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Agregando atributo class en options de un select (forms.ModelChoiceField +

En ese caso puedes hacerlo con angularjs de manera muy fácil.

Ejemplo: http://jsfiddle.net/EZbfM/

O si lo quieres selects dependientes con angularjs también los puedes manejar muy fácilmente.
Otro ejemplo: http://jsfiddle.net/sgdea/2/

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 06:36.