Django如何基于其他字段动态过滤ChoiceField实现级联下拉菜单
Django ModelForm 关联外键级联下拉菜单实现
需求描述
需要实现供用户填写的Django Model Form,表单内包含3个对应模型外键的下拉菜单,三者为级联依赖关系:当用户选中第一个字段的取值后,第二个字段的可选结果需要根据前者动态筛选。已知实现该功能需要使用AJAX,也清楚过滤需要给字段设置queryset,例如form.fields['stabilimento'].queryset = Stabilimento.objects.filter(),但不清楚如何将二者结合实现效果。
现有基础代码
models.py
class Ticket(models.Model): stabilimento = models.ForeignKey(Stabilimento, on_delete = models.RESTRICT) linea = models.ForeignKey(Linea, on_delete = models.RESTRICT) macchina = models.ForeignKey(Macchina, on_delete = models.RESTRICT)
forms.py
class NewTicketForm(forms.ModelForm): class Meta: model = Ticket fields = '__all__'
最终实现方案
创建一个专用视图,返回对应筛选数据列表的HTML片段,通过AJAX调用仅重载模板的对应部分即可:
- 后端新增视图,接收上一级下拉的选中值作为参数,查询筛选出下一级的可选数据,渲染为下拉选项的HTML片段返回
- 前端给第一级下拉菜单绑定change事件,选中值变更时发起AJAX请求,携带选中值到上述后端视图
- 前端拿到返回的HTML片段后,直接替换第二级下拉菜单的内容,同理实现第二级到第三级的级联逻辑
内容的提问来源于stack exchange,提问作者Tiziano Pedrazzoli
相关产品推荐
相关产品推荐

