You need to enable JavaScript to run this app. Django如何基于其他字段动态过滤ChoiceField实现级联下拉菜单
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 19:24:04