Python django中使用ajax/dajax的动态表单
我有一个带有查询集的简单表单,用于显示作业对象并允许用户选择一个。现在,我想要一组两个单选按钮,允许用户选择“过滤选项”。如果用户使用单选按钮选择一个组过滤器,我会显示一个下拉列表,允许用户选择要过滤的组。我想在不需要重新加载页面的情况下执行此操作,因此我尝试使用dajax 我在dajax网站上找到了一个做类似事情的例子,但是,我无法让它工作。单选按钮出现,下拉列表显示为空。当我单击组单选按钮时,下拉列表应该填充我的所有组对象,但它没有 我已经在这上面呆了一段时间了,所以任何帮助都将不胜感激 forms.py ajax.py 模板Python django中使用ajax/dajax的动态表单,python,ajax,django,Python,Ajax,Django,我有一个带有查询集的简单表单,用于显示作业对象并允许用户选择一个。现在,我想要一组两个单选按钮,允许用户选择“过滤选项”。如果用户使用单选按钮选择一个组过滤器,我会显示一个下拉列表,允许用户选择要过滤的组。我想在不需要重新加载页面的情况下执行此操作,因此我尝试使用dajax 我在dajax网站上找到了一个做类似事情的例子,但是,我无法让它工作。单选按钮出现,下拉列表显示为空。当我单击组单选按钮时,下拉列表应该填充我的所有组对象,但它没有 我已经在这上面呆了一段时间了,所以任何帮助都将不胜感激 f
您需要将dajaxice函数添加到select onchange以引用模板中的函数 比如:
<select name="combo2" id="combo2" onchange="Dajaxice.your_project.your_appname.updatefilter(Dajax.process,{'option':this.value}" size="1"></select>
用项目名称替换\u项目,用appname替换\u应用程序
还要确保你的模板中有所有必要的标题,并且它们确实存在;e、 例如,如果你查看源代码,你可以点击它们
确保在firefox中使用google chrome inspector Ctrl-Shift-I或firebug进行调试
编辑:我现在注意到你的表格中有类似的东西。当您查看源代码时,它如何在HTML中呈现?转义不正确吗?我想您忘记了这里的%sign value=和结束符:
out=%s%s%out,o,o啊哈!单引号环绕选项呈现为39;有没有关于如何在forms.py中转义它们的建议?好的,我通过使用mark_safe在form对象中设置attr来修复转义问题。它现在呈现。但仍然没有工作…:-@纳切夫斯基:你的HTML源文件中有所有正确的标题吗dajaxice.core.js、'jquery.core.js、'jquery-???.min.js'或您使用的任何库?您还可以尝试将“onchange”中的“Dajaxice.tdportal.updatefilter”更改为“Dajaxice.project\u name.app\u name.updatefilter”,并替换为适当的名称吗?我肯定必须指定项目和应用程序名称才能在我的系统上运行。谢谢,我修复了渲染选项。这段代码来自我看到的一个示例,我想它不合适-
def updatefilter(request, option):
dajax = Dajax()
options = [Group.objects.all(),
Host.objects.all(),
]
out = ""
for o in options[int(option)]:
out = "%s<option value='#'>%s" % (out,o,)
dajax.assign('#combo2','innerHTML',out)
return dajax.json()
dajaxice_functions.register(updatefilter)
{{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>
<select name="combo2" id="combo2" onchange="Dajaxice.your_project.your_appname.updatefilter(Dajax.process,{'option':this.value}" size="1"></select>