2012-09-26 67 views
5

Tengo un formulario personalizado que crea un campo oculto de un campo:¿Cómo puedo ocultar una etiqueta django en un formulario django personalizado?

class MPForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MPForm, self).__init__(*args, **kwargs) 
     self.fields['mp_e'].label = "" #the trick :) 

class Meta: 
    model = MeasurementPoint 
    widgets = { 'mp_e': forms.HiddenInput() } 
    exclude = ('mp_order') 

que tengo que hacer este pequeño truco para "ocultar" la etiqueta, pero lo que yo quiero hacer es sacarlo de la forma. Creo el formulario de esta manera:

forms.MPForm() 
+2

Como un lado, no olvides la coma final en tu tupla 'exclude'. Debe ser 'exclude = ('mp_order',)' – Alasdair

Respuesta

14

No recomendaría eliminar la etiqueta, ya que hace que el formulario sea inaccesible. Puede add a custom CSS class en el campo y en su CSS make that class invisible.

EDITAR

que se perdió que la entrada estaba oculta por lo que la accesibilidad no es una preocupación.

Puede hacer que los campos de formulario directamente en su plantilla:

<form ...> 
    {% for field in form.hidden_fields %} 
     {{ field }} 
    {% endfor %} 

    {% for field in form.visible_fields %} 
     {{ field.label }} {{ field }} 
    {% endfor %} 
</form> 
+0

Es solo una entrada oculta de control, no necesito la etiqueta, estoy usando esta entrada oculta como token. – Harchet

+0

De acuerdo, echaba de menos que el campo estaba oculto. Lo siento, voy a editar la respuesta anterior. –

+0

Creo que esta es la mejor manera de hacerlo, pero deberían implementar una forma de eliminar etiquetas de una forma ... ¡Gracias! – Harchet

0

A menos que esté malentendido su pregunta, sólo tiene que añadir el campo mp_e a la tupla excluir en la clase meta. ¿No es esto lo que necesitas?

class MPForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MPForm, self).__init__(*args, **kwargs) 

    class Meta: 
     model = MeasurementPoint 
     exclude = ('mp_order','mp_e') 
+0

No, necesito una entrada oculta, lo que no necesito es la etiqueta en frente de ella. – Harchet

+0

en ese caso, la respuesta de Alasdair es correcta. – joeButler

5

Si se utiliza el método form.as_p o form.as_table, Django no debería mostrar las etiquetas para los campos ocultos de todos modos, así que no hay necesidad de cambiar la etiqueta en su método __init__.

{{ form.as_table }} 

Si está customizing the form template, puede utilizar el atributo field.is_hidden para comprobar si el campo está oculto.

{% if field.is_hidden %} 
    {# Don't render label #} 
{% endif %} 

Como alternativa, puede loop over hidden and visible fields separately, y omita la etiqueta de los campos ocultos.

+0

Lo que pasa es que quiero usar el formulario sin ninguna personalización, simplemente cambiando cosas en form.py, pero parece que es imposible hacerlo – Harchet

+0

Como dije antes, ** Django no mostrará la etiqueta de oculto campos por defecto **. No necesita cambiar la etiqueta en su método '__init__'. Si la etiqueta se muestra, entonces está haciendo algo en su vista o plantilla que no ha incluido en su pregunta. – Alasdair

Cuestiones relacionadas