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
相关产品推荐
相关产品推荐

