自定义管理器为何破坏Django关联对象查询?
Django自定义管理器引发的关联对象查询问题
场景背景
在使用带有ForeignKey关联的日志模型时,期望反序列化A实例时能包含关联的B实例ID列表(格式如b_set: [3,6,7]),采用django_rest_framework进行序列化,并在Meta.fields中指定了关联字段。
问题复现
定义LoggedModelManager用于过滤日志实例后,为模型A、B配置该自定义管理器,对应的日志模型ALog、BLog则使用默认管理器。此时反序列化A实例时,alog_set能正常返回结果,但b_set字段直接缺失。
临时解决方案
为模型B新增默认管理器objects_as_related,在模型Meta中设置base_manager_name为自定义管理器objects,default_manager_name为objects_as_related后,b_set字段恢复正常显示。
疑问
- 自定义管理器返回的是QuerySet,为何会导致
b_set缺失而非返回空数组? - Django文档说明关联对象查询默认使用
_base_manager而非_default_manager,但实际案例表现相反,是否存在理解误区? - 寻求该现象的原理解析,以及对现有文档表述的修正建议。
内容的提问来源于stack exchange,提问作者Clement Faisandier
相关产品推荐
相关产品推荐

