Django ModelAdmin的autocomplete_fields选中项ID(外键)存储位置问询
Django 2.2 autocomplete_fields 选中值存储与获取逻辑解答
核心问题结论
Django创建新对象时,直接从对应外键字段的隐藏Select控件读取选中的外键ID,不需要从展示文本解析。
具体存储逻辑
- 你观察到的
#cashregisterproduct_set-0-id是当前inline条目自身的主键ID,仅编辑已存在的条目时才会有值,新增条目时为空,和你要找的外键ID无关。 - autocomplete_fields底层基于Select2组件实现,Django会为每个外键字段生成一个隐藏的
<select>控件,控件ID格式为id_{inline前缀}-{行号}-{外键字段名},你的场景里对应产品外键的控件ID应为id_cashregisterproduct_set-0-product(假设你的外键字段命名为product,可自行替换为实际字段名)。 - 选中autocomplete下拉条目后,Select2会自动将选中对象的ID同步为该隐藏select控件的
value,原生option不会标记selected属性属于Select2的正常渲染逻辑,不影响实际取值。
取值方式
- 后端接收表单时会自动读取该控件的value值映射为外键关联,无需额外处理。
- 前端如需手动获取选中的外键ID,可直接执行JS代码:
$('#id_cashregisterproduct_set-0-product').val(),Django admin默认已加载jQuery,可直接使用。
内容的提问来源于stack exchange,提问作者wtdmn
相关产品推荐
相关产品推荐

