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

Par*_*ker 0 forms django ajax django-forms dynamic-list

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

更新:我的问题非常类似于Django ajax形式,choicefields依赖但我不完全理解答案中发生了什么.如果有人能够更详细地解释一下,这将解决我现在的所有问题.我正在尝试那个答案,但是当我尝试加载它时,我得到500和403错误.

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

Dav*_*ver 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)
Run Code Online (Sandbox Code Playgroud)

其次,你必须从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>
Run Code Online (Sandbox Code Playgroud)

而且,除了"漂亮"和错误检查(例如,如果调用list_cities失败会发生什么?),这基本上就是它的全部内容.