You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django表单下拉框过滤排除数据库已存在重复分组实现方案咨询

下拉框过滤已添加分组实现方案

你需要动态过滤GruppiForm中dati_gruppo字段的可选选项,排除当前scheda已经关联过的分组即可,修改步骤如下:


1. 改写GruppiForm支持动态过滤选项

修改form.py中的GruppiForm类,新增初始化逻辑接收当前scheda实例,过滤已使用的分组:

class GruppiForm(forms.ModelForm):
    class Meta:
        model = models.DatiGruppi
        exclude = ['gruppi_scheda']
    
    def __init__(self, *args, **kwargs):
        # 提取传入的scheda实例,避免传入父类初始化报错
        scheda = kwargs.pop('scheda', None)
        super().__init__(*args, **kwargs)
        if scheda:
            # 查询当前scheda已经关联的所有分组ID
            used_group_ids = models.DatiGruppi.objects.filter(
                gruppi_scheda=scheda
            ).values_list('dati_gruppo_id', flat=True)
            # 下拉选项仅保留未使用的分组
            self.fields['dati_gruppo'].queryset = models.Gruppi.objects.exclude(
                id__in=used_group_ids
            )

2. 视图层传入scheda实例初始化表单

修改views.py中两处初始化GruppiForm的代码,都传入当前scheda参数(POST请求也需要传,否则表单校验会失败):

POST请求分支修改:

if request.method == "POST":
    # 初始化表单时传入当前scheda
    gruppo_form = GruppiForm(request.POST, prefix = 'gruppo', scheda=scheda)
    # 后续逻辑保持不变

GET请求分支修改:

else:
    # 初始化表单时传入当前scheda
    gruppo_form = GruppiForm(prefix = 'gruppo', scheda=scheda)
    # 后续逻辑保持不变

修改完成后,打开模态框时下拉选择框就只会展示当前计划还未添加的分组,已经保存过的分组不会再出现在选项中。

内容的提问来源于stack exchange,提问作者user15374373

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:39:02