Django QuerySet中ManyToManyField使用"="过滤的含义是什么?
关于Django ManyToManyField使用
=过滤的含义解析 咱们直接说结论:当你执行Article.objects.filter(publications=pub)时,这个查询会筛选出所有和指定的pub实例存在关联关系的Article对象——简单说就是,所有在自己的publications多对多字段里包含了这个pub的文章。
举个更直观的例子:如果pub是一个名为《Django开发者周刊》的Publication实例,那这个filter返回的就是所有在《Django开发者周刊》上发表过的文章。
背后的逻辑其实是Django自动帮你处理了多对多的中间表:它会去查询那个自动生成的中间关联表,找出所有publication_id等于pub.id的记录,然后把这些记录对应的article_id关联的Article实例全部返回给你。
另外补充个小知识点:你也可以直接传主键值来达到同样的效果,比如Article.objects.filter(publications=pub.id),Django会自动识别你传入的是实例还是主键,处理逻辑是完全一致的。
内容的提问来源于stack exchange,提问作者43Tesseracts
相关产品推荐
相关产品推荐

