在没有重新加载页面的情况下更新Django中的表单值?

时间:2011-07-10 03:27:13

标签: ajax django forms django-forms dynamic-list

我目前正在Django开展一个项目,目前我正在开发一个包含多个元素的表单。每个元素都是动态的,当它上面的元素改变值时,需要更新它的选项。我知道我可以使用AJAX更新元素内容,只要另一个更改值,但我想知道是否有更多的Django方式,或者无论如何做这个服务器端?我的主要目标是每次都不重新加载整个页面,任何反馈都值得赞赏。谢谢!

更新:我的问题与Django ajax form, choicefields dependancy非常相似但我不完全理解答案中的内容。如果有人能够更详细地解释一下,这将解决我现在的所有问题。我正在尝试那个答案,但是当我尝试加载它时,我得到500和403错误。

跟进:显然我的所有问题都来自一个过时的jQuery库,一旦我更新它,一切都恢复了工作!

1 个答案:

答案 0 :(得分:5)

AFAIK没有一个规范的Django做Ajax的方式......但它是仙女直接做自己:

首先,您必须创建一个视图,该视图返回更新视图所需的任何JSON数据。例如,省内的城市列表:

from django.utils import simplejson as json

def list_cities(request):
    cities = city_names_in_province(request.GET["province"])
    return json.dumps(cities)

其次,你必须从HTML中调用该视图(假设是jQuery):

<select id="provinces">
    …
</select>

<select id="cities" disabled="true">
    <option>---</option>
</select>

<script>
$("#provinces").change(function() {
    var province = $(this).val();
    $.getJSON("{% url list_cities %}", { province: province }, function(cities) {
        var cities_select = $("#cities");
        … put the `cities` list into the `cities_select` …
    });
});
</script>

而且,除了“漂亮”和错误检查(例如,如果对list_cities的调用失败会发生什么?),那基本上就是它的所有内容。