2012-09-26 1 views
5

私は、フィールドの隠し入力を作成するカスタムフォームがあります。カスタムdjango形式のdjangoラベルを隠すにはどうすればいいですか?

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

を私はラベルを「非表示」にするには、この小さなトリックを行う必要がありますが、私は何をしたいのフォームから削除しています。

forms.MPForm() 
+2

第三者として、 'exclude'タプルの末尾にカンマを忘れないようにしてください。それは 'exclude =( 'mp_order'、)' – Alasdair

答えて

14

フォームをアクセスできない状態にするため、ラベルを削除することはお勧めしません。あなたはフィールドにadd a custom CSS class、あなたのCSSはmake that class invisibleになります。

EDIT

私は、アクセシビリティが問題ではありませんので、入力が隠されていたことを逃しました。

あなたのテンプレートで直接フォームフィールドをレンダリングすることができます。

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

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

でなければなりません。これは単なるコントロールの隠れた入力です。私はラベルを必要としません、私はこの隠し入力をトークンとして使用しています。 – Harchet

+0

私はフィールドが隠されていたことを忘れました。申し訳ありませんが、私は上記の答えを編集します。 –

+0

これはこれを実行する最良の方法だと思うが、フォームのラベルを削除する方法を実装する必要があります... ありがとう! – Harchet

0

私はあなたの質問を誤解していない限り、あなただけのメタクラスの下に除外タプルにmp_eフィールドを追加する必要があります。これはあなたが必要とするものではありませんか?あなたがform.as_pform.as_table方法を使用する場合は

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

いいえ、私は隠された入力が必要です、私はそれの前にラベルが必要ではありません。その場合には – Harchet

+0

であり、Alasdairの答えは正しい。 – joeButler

5

は、Djangoはとにかくあなたの隠されたフィールドのラベルを表示するべきではありませんので、あなたの__init__方法でラベルを変更する必要はありません。

{{ form.as_table }} 

あなたがcustomizing the form templateている場合は、フィールドが隠されているかどうかを確認するfield.is_hidden属性を使用することができます。

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

また、loop over hidden and visible fields separatelyにすることもできますし、隠しフィールドのラベルを省略することもできます。

+0

私はカスタマイズをせずにform.pyを使いたいと思っていますが、それは不可能なようです。 – Harchet

+0

上記のように、** Djangoはhiddenのラベルを表示しませんデフォルトで**フィールド。 '__init__'メソッドでラベルを変更する必要はありません。ラベルが表示されている場合は、あなたの質問に含まれていないビューやテンプレートで何かをやっています。 – Alasdair

関連する問題