Django模型的ManyToManyField如何直接存储id而非实例对象
问题解答
你可以直接通过Django ORM提供的多对多字段内置方法实现,不需要提前查询Employee实例,直接传入ID列表即可:
实现方法
- 方法1:全量覆盖关联关系(清空原有关联后设置新的关联),使用
set()方法
在你现有代码基础上补充逻辑即可:
dept = Department(name=name) dept.save() employee_ids = [1,2] # 直接传入ID列表完成关联,无需查询Employee实例 dept.employee.set(employee_ids)
- 方法2:追加关联关系(保留原有关联,新增传入的ID对应的关联),使用
add()方法
# 打散列表传入即可 dept.employee.add(*employee_ids)
注意:操作多对多关联前需要保证Department实例已经调用
save()方法存入数据库,实例有对应的主键值才能完成关联操作。
原理说明
Django的ManyToMany字段的set()、add()方法原生支持接收两类参数:对应关联表的模型实例、模型主键值。当你传入ID值时,ORM底层会直接将对应ID写入多对多的中间关联表,不会触发额外的Employee实例查询,完全符合你直接存储ID的需求。
内容的提问来源于stack exchange,提问作者Jasmeet Pabla
相关产品推荐
相关产品推荐

