0

年を選択するフォームを作成しようとしています。これは本当に簡単だと確信していますが、なぜエラーが発生するのかわかりません。

主なエラーは次のとおりです。

'AbiturForm' object has no attribute 'fields'

フォームを持つ私のクラス:

class AbiturForm(forms.Form):
    year=forms.CharField(widget=forms.Select(),required=False)
    abitur=forms.BooleanField(required=False)
    def __init__(self):
        choices=[(x,x) for x in range(1900,2000)]
        self.fields['year'].choices=choices

私のテンプレート:

{% extends "home/portal.html" %}

{% block body %}
<div id="content-main">
<div class="module">
<h2>Suche:</h2>
<form action="/suchen/abitur/" method="post">
{% csrf_token %}
<table>
    <tr>
        <td><label><b>Jahr:</b></label></td>
        <td>
            <select style="width:200px" name="year" id="year">
            </select>
        </td>
    </tr>
    <tr>
        <td><label><b>Abitur?:</b></label></td>
        <td>                
            <input type="checkbox" name="abitur" id="abitur" class="texto"  />
        </td>
    </tr>
</table>
<input type="submit" value="Speichern" class="button"/>
</form>
</div>
</div>
{% endblock %}

どんな助けでも大歓迎です。

ありがとう :)

4

2 に答える 2

2

zsquare は正しいですが__init__、選択肢を動的に構築する場合を除き、オーバーライドする必要はないことに注意してください。通常、宣言でそれを行うだけです:

class AbiturForm(forms.Form):
    year = forms.ChoiceField(choices=[(x, x) for x in range(1900, 2000)], required=False)

注意すべき点がいくつかあります: 使用する方がおそらく良いでしょうChoiceField(これは既に Select ウィジェットにデフォルト設定されています)。句読点の周りのスペースは PEP8 形式であることに注意してください。

于 2012-08-20T13:51:14.863 に答える
2

スーパーを呼び出すまで、フィールドは設定されません。試す:

class AbiturForm(forms.Form):
    year=forms.CharField(widget=forms.Select(),required=False)
    abitur=forms.BooleanField(required=False)
    def __init__(self):
        super(AbiturForm, self).__init__()
        choices=[(x,x) for x in range(1900,2000)]
        self.fields['year'].choices=choices
于 2012-08-20T13:42:12.270 に答える