2012-09-26 2 views
5

Ich habe ein benutzerdefiniertes Formular, das einen versteckten Eingang ein Feld erzeugt:Wie kann ich ein Django-Label in einem benutzerdefinierten Django-Formular verbergen?

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') 

Ich habe diesen kleinen Trick tun, um das Etikett zu „verstecken“, aber was ich möchte, ist es aus der Form tun zu entfernen. Ich erstelle das Formular so:

forms.MPForm() 
+2

Nebenbei, vergessen Sie nicht das abschließende Komma in Ihrem 'Exclude' Tupel. Es sollte sein: exclude = ('mp_order',) ' – Alasdair

Antwort

14

Ich würde nicht empfehlen, das Etikett zu entfernen, da es das Formular unzugänglich macht. Sie könnten add a custom CSS class an das Feld und in Ihrem CSS make that class invisible.

EDIT

habe ich verpasst, dass der Eingang versteckt war so Erreichbarkeit kein Problem ist.

Sie können die Formularfelder direkt in Ihrer Vorlage machen:

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

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

Es ist nur ein Steuerelement versteckte Eingabe, ich brauche nicht die Bezeichnung, ich verwende diese versteckte Eingabe als Token. – Harchet

+0

Okay, ich habe verpasst, dass das Feld ein versteckter war. Entschuldigung, ich werde die obige Antwort bearbeiten. –

+0

Ich denke, das ist der beste Weg, es zu tun, aber sie sollten eine Möglichkeit zum Löschen von Etiketten in einer Form implementieren ... Vielen Dank! – Harchet

0

Wenn ich Ihre Frage bin Missverständnis, Sie müssen nur das mp_e Feld zum Ausschluß Tupel unter der Meta-Klasse hinzuzufügen. Ist das nicht was du brauchst?

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

Nein, ich brauche einen versteckten Eingang, was ich nicht brauche, ist das Etikett davor. – Harchet

+0

in diesem Fall ist dann Alasdairs Antwort richtig. – joeButler

5

Wenn Sie die form.as_p oder form.as_table Methode verwenden, Django sollten die Etiketten nicht ohnehin für Ihre verborgenen Felder angezeigt werden, so gibt es keine Notwendigkeit, das Etikett in Ihrem __init__ Methode zu ändern.

{{ form.as_table }} 

Wenn Sie customizing the form template sind, können Sie das field.is_hidden Attribut überprüfen, ob das Feld ausgeblendet ist.

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

Alternativ können Sie loop over hidden and visible fields separately, und das Etikett für versteckte Felder weglassen.

+0

Die Sache ist, dass ich das Formular ohne jede Anpassung verwenden möchte, nur etwas in form.py ändern, aber es sieht so aus, als ob es unmöglich ist, das zu tun – Harchet

+0

Wie ich oben sagte, ** Django wird nicht das Etikett für versteckt zeigen Felder standardmäßig **. Sie müssen die Beschriftung in Ihrer Methode "__init__" nicht ändern. Wenn das Label angezeigt wird, machen Sie etwas in Ihrer Ansicht oder Vorlage, das Sie nicht in Ihre Frage aufgenommen haben. – Alasdair

Verwandte Themen