在HTML模板中添加,然后引用Django Form Widgets

时间:2014-07-22 09:12:03

标签: jquery html django django-forms django-templates

我在表单类中有以下小部件;

class InputParametersForm(forms.Form):

sqlConnection = SQLSeverConnection('MSSQLServerDataSource','default_user','password123!','HD')
tableChoices = sqlConnection.getTableNames()

TableName = forms.Select(widget=forms.SelectMultiple,
                                 choices=tableChoices)

ColumnName = forms.Select(widget=forms.SelectMultiple)

StartDateTime = forms.DateTimeInput(widget=forms.DateTimeInput)
EndDateTime = forms.DateTimeInput(widget=forms.DateTimeInput)

class Meta:
    model = SelectionHistory
    fields = ("TableName","ColumnName","StartDateTime","EndDateTime")

我目前的模板是;

 <script>
        $('#id_tables').change(function()
        {
            tableSelectionChanged();
        })

        function tableSelectionChanged()
        {
            var selected_table = $('#id_tables').selectedIndex;
            $.get('/historicaldata/input_parameters/', {selected_table : selected_table}, function(data){
            $('#id_columns').val(data);
            });
        }


    </script>

</head>

<body>
    <h1>What would you like to see?</h1>

    <form id="input_parameters" method="post" action="#">
        {% csrf_token %}

        <select name="tables" id="id_tables" size="5">
            {% for table in form.tableChoices %}
                <option value="{{table.id}}">{{table}}</option>
            {% endfor %}
        </select>

        <select name="columns" id="id_columns" size="5">
            {% for column in form.columnChoices %}
                <option value="{{column.id}}">{{column}}</option>
            {% endfor %}
        </select>

        <input type="submit" value="submit" />
    </form>

</body>

我想添加表单中定义的小部件,而不是我在模板中添加的选择类型对象。我如何在语法方面做到这一点?然后我将如何访问小部件事件处理程序来复制我已经拥有的ajax / jquery?

从我迄今为止搜索的主题开始,我一直在努力寻找具体的内容。

如果你有时间,我真的很感激一个例子。

谢谢!

1 个答案:

答案 0 :(得分:0)

你应该按照django的建议渲染表单,而不是像你那样构建HTML。

有关详细说明,请参阅this文档。

总结一下,您可以使用{{form}}或{{form.as_p}}{{form.as_table}}等呈现表单。

您还可以使用

渲染单个字段
{%for field in form %}
    {{field}}
{%endfor%}

和其他变种。