使用ajax/dajax的Django动态表单

2024-10-01 09:40:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有查询集的简单表单,用于显示作业对象并允许用户选择一个。现在,我想有一组两个单选按钮,允许用户选择一个'过滤选项'。如果用户用单选按钮选择一个组过滤器,我会显示一个下拉列表,允许他们选择要过滤的组。我想在不需要重新加载页面的情况下执行此操作,所以我尝试使用dajax。在

我在dajax网站上找到了一个类似的例子,但是我没能让它正常工作。单选按钮出现,下拉列表显示(空)。当我点击“组”单选按钮时,下拉列表应该填充我的所有组对象,但它没有。在

我已经在这件事上耽搁了一段时间,所以如果有任何帮助,我将不胜感激。在

表单.py

filters = (('0', 'Group'), 
           ('1', 'Host'), 
          )

class JobSelectForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super(JobSelectForm, self).__init__(*args, **kwargs)
        self.fields['jobs'].widget.attrs["size"] = 20
    jobs = forms.ModelChoiceField(queryset=Job.objects.all().order_by('name'), empty_label=None,)
    filter = forms.ChoiceField(choices=filters,
                               widget=forms.RadioSelect(attrs={'onchange': "Dajaxice.tdportal.updatefilter(Dajax.process,{'option':this.value})", 'name':'combo1', 'id':'combo1', }, 
                                                        renderer=HorizRadioRenderer),

阿贾克斯.py

^{pr2}$

模板

    {{selectForm.filter.label}}: {{selectForm.filter}}
    <br>
    <select name="combo2" id="combo2" onchange="" size="1"></select>
    <br><br>
    <form method="post" action="/tdportal/jobs/">{% csrf_token %}
        {{selectForm.jobs}}
        <br><br>
        <input type="submit" value="Edit" />   <a href="/tdportal/jobs/new/"><input type="button" name="new" value="New" /></a>
    </form>

Tags: 对象用户namebrself表单列表value
2条回答

我想你忘了一个%符号(value='#')和一个</option>在这里:

out = "%s<option value='%s'>%s</option>" % (out,o,o)

您需要将dajaxice函数添加到selectonchange中,以引用模板中的函数。在

比如:

<select name="combo2" id="combo2" onchange="Dajaxice.your_project.your_appname.updatefilter(Dajax.process,{'option':this.value}" size="1"></select>

(用你的项目名称替换你的项目,用你的应用替换你的应用)。在

还要确保在你的模板中你有所有必要的标题(并且它们确实在那里;例如,如果你查看源代码,你可以点击它们)。在

一定要使用googlechrome检查器(Ctrl-Shift-I)或firebug(在firefox中)进行调试。在

编辑:我现在注意到你的表格里有一些类似的东西。当您查看源代码时,它如何在HTML中呈现?是不是越狱不当?在

相关问题 更多 >