用Django动态更新表单

Dynamically updating form with Django

本文关键字:表单 更新 动态 Django      更新时间:2023-09-26

我需要建立一个web表单,其中有许多选择字段,其选择取决于对前面字段的答案。一个典型的例子是车辆年份>制造>模型表单,其中制造的选择选项直到选择了年份才填充,而模型的选择选项直到选择了制造才填充。填充每个单独字段的sql看起来像这样:

select distinct year from cars
select distinct make from cars where year = [answer above]
select distinct model from cars where year = [answer above] and make = [answer above]

这将是一个已经在Django中实现的项目的一部分,所以我希望这也能在Django中实现。虽然我没有这种类型的表单的经验,但我对异步javascript调用有一个基本的理解,必须碰巧支持它。

格式如下:

class CarForm(forms.Form):
    year = forms.ChoiceField(choices=get_years())
    make = forms.ChoiceField(choices=get_makes(year))
    model = forms.ChoiceField(choices=get_models(year, make))

视图如下所示:

def save_car(request):
    if request.method == 'POST':
        form = CarForm(request.POST)
        if form.is_valid():
            handle_results(form.cleaned_data)
            return HttpResponse('Success')
    else:
        form = CarForm()
    return render_to_response('car.html', locals())

我最大的问题是如何更新每个选择字段的选择。如果有任何帮助就太好了!

我推荐你看看这篇关于django中ajax和jquery的文章

当您在视图中获得此ajax调用的回调时,您可以检查在请求中传递的上下文。基于这些数据,你可以过滤下拉列表的结果。

看起来你已经有一些方法或函数可以得到你想要的具体细节。您可以将请求中的数据直接传递给它们。

你可以通过覆盖django forms _init_方法和模板中的javascript来实现。Check Here