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

Django Admin ModelChoiceField选项报错及PlaceSection筛选异常求解

问题排查与修复方案

一、原Admin保存报错根因(供参考)

之前Admin侧抛出「Select a valid choice」错误的核心问题有两个:

  • ModelChoiceField的第一个参数要求传入模型实例查询集,你传入的PlaceSection.objects.values()返回的是字典类型的查询集,和字段要求的类型不匹配
  • 表单字段名和Meta中声明的字段名不一致:你定义的表单字段是place_sections,但Meta的fields列表中写的是place_section,少了结尾的s,导致表单提交的字段值无法和模型字段对应

二、当前搜索页TypeError修复方案

你遇到的'PlaceSection' object is not iterable错误,出现在query.py的过滤逻辑中:
你在循环里使用了place_sections__in=section,这里的section是遍历得到的单个PlaceSection实例,而__in查询要求右侧必须传入可迭代对象(列表、查询集等),直接传单个实例就会触发不可迭代报错。

同时你的过滤逻辑冗余,完全不需要循环拼接查询集、调用intersection,直接用表单返回的选中列表过滤即可,修改后的filter_query函数如下:

# query.py
def filter_query(form):
    query = Institution.objects.all()
    selected_sections = form.cleaned_data["place_sections"]
    if selected_sections:
        # 直接用选中的PlaceSection列表过滤,无需循环
        query = query.filter(place_sections__in=selected_sections)
    return query

如果你的Institution模型和PlaceSection是外键/多对多关联,关联字段名就是place_sections的话,上面的代码可以直接正常运行,不会再抛出类型错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:57:03