Django中通过parent_id查询子模型,能否避免关联父表?
问题
假设有两个通过外键关联的模型Parent和Child,希望查询所有子模型数据时不与父表进行关联查询。请问使用以下代码是否可行?注意使用的是单下划线而非双下划线,理论上应该只会查询Child表中的parent_id字段,而不会触发关联查询,对吗?
Child.objects.filter( parent_id=parent_id )
解答
这个代码完全可行,而且确实不会触发与Parent表的关联查询。
在Django中,外键字段默认会在对应数据库表中生成以_id结尾的字段(比如这里的parent_id),当你在filter里直接用parent_id=xxx过滤时,Django生成的SQL只会针对Child表操作,仅检查Child表的parent_id字段值,不会涉及Parent表的任何查询操作,完全符合你不想关联父表的需求。
如果用双下划线写法(比如parent__id=xxx)才会触发跨表关联查询,而单下划线的写法是直接操作当前模型对应表的原生字段,不存在关联逻辑。
内容的提问来源于stack exchange,提问作者mohamed naser
相关产品推荐
相关产品推荐

