2016-04-27 17 views
1

forms.pyで、私は次のように定義しました:私のテンプレートで削除デフォルトのインデント

SURVEY_YEAR_EMPTY_LABEL_CHOICES = [(1, 'Select Survey Year'), (2, 'Illegible'), (3, 'Not Provided')] 

class SurveyYearForm(forms.ModelForm): 
    survey_year = forms.ModelChoiceField(label='Survey Year', required = False, queryset=SurveyYear.objects.all(), empty_label=SURVEY_YEAR_EMPTY_LABEL_CHOICES) 

、私は次のようしている:

<div class="form-row"> 
    {{ form.survey_year.errors }} 
    {{ form.survey_year.label_tag }} {{ form.survey_year }} 
</div> 

空のラベルに関連付けられた選択肢はインデントで表示されます。このインデントを削除するにはどうすればよいですか?どんな助けもありがとう。ありがとう。

+0

empty_labelは文字列でなければなりません。なぜタプルのリストを使用していますか? https://docs.djangoproject.com/en/1.9/ref/forms/fields/#django.forms.ModelChoiceField.empty_label –

+0

文字列で表される1つのオプションではなく、オプションのリストにするためにempty_labelを使用します。それは機能しますが、リストのオプションはインデントされています。インデントを取り除く方法はありますか? – Foobar

答えて

0

これは、Djangoがあなたのオプションセットをoptgroupの内部でレンダリングするために起こります。デフォルトで

<optgroup> 
    <option value="1">Select Survey Year</option> 
    <option value="2">Illegible</option> 
    <option value="3">Not Provided</option> 
</optgroup> 

ほとんどのブラウザでは、あなたがインデントを見ている理由ですOPTGROUP、内部のオプションにいくつかの左パディングを追加します。あなたのオプションのためのレンダリングされたHTMLは次のようになります。

optgroup > option { 
    padding-left: 0; 
} 

明らかに、ブラウザ間でテストする必要があります。

PS:あなたがこれを行うことができるという事実(empty_labelにタプルを供給すること)は、Djangoがフィールド値をどのようにレンダリングし、明らかに文書化された/サポートされていない動作であるかの人為的なものです。私はそれに頼るつもりはない。私はまた、3つの "空の"オプションを持つことが何を意味するのかよく分かりません!

+0

詳細な回答ありがとうございます。私が実際にしようとしているのは、単一の文字列を受け入れるように設計されたempty_labelにタプルを提供する代わりに、データベースから返されたクエリセットに2つのオプションを追加することです。とにかくこれを行うにはforms.pyの中にありますか? – Foobar

+0

これは本当にあなたがそれらのフィールドで何をしたいかによって異なります。空のオプション(つまり、情報を破棄してどこでも使用しない)か、どこかに保存しますか?後者の場合は、 'ModelChoiceField'の代わりに' ChoiceField'を使用してカスタム+モデルの選択肢を追加する必要があるでしょう。 – solarissmoke

+0

ChoiceFieldの「選択肢」がQuerySetとListを連結した例はありますか? – Foobar

関連する問題