【问题标题】:Create select for form django为表单django创建选择
【发布时间】:2012-08-15 20:24:58
【问题描述】:

我正在尝试创建一个表单,您必须在其中选择年份。 我很确定这很容易,但我不知道为什么会出现一些错误。

主要错误是这样的:

'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 %}

任何帮助将不胜感激。

谢谢:)

【问题讨论】:

    标签: django forms select widget init


    【解决方案1】:

    zsquare 是正确的,但请注意,除非您想动态构建选择,否则无需覆盖 __init__。通常你会在声明中这样做:

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

    需要注意的几点:最好使用ChoiceField(已经默认为 Select 小部件),请注意标点符号周围空格的 PEP8 格式。

    【讨论】:

    • 谢谢,错误不再存在,但我的模板无法正确显示我尝试过的选择: 和:{{form.as_p}} 结果是一样的,一个没有选项的select控件。
    • 请展示您的观点,以及使用{{ form.as_p }}的模板版本。
    • 我刚刚关闭并重新打开了 Eclipse,现在可以完美运行。非常感谢您的解决方案:)
    【解决方案2】:

    在调用 super 之前不会设置字段。试试:

    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
    

    【讨论】:

      猜你喜欢
      • 2020-01-09
      • 2013-02-14
      • 1970-01-01
      • 2013-03-01
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多