Django ForeignKey过滤整个对象或object_id

时间:2018-12-04 09:13:31

标签: django django-models

我知道object_idobject.id更有效率 但这对外键过滤有效吗?

Model.objects.filter(author_id=author_obj.id) 

Model.objects.filter(author_id=author_id) 

更有效
Model.objects.filter(author=author_obj)

2 个答案:

答案 0 :(得分:2)

如文档的Queries over related objects部分所述,author_obj.idauthor_obj之间没有区别:

  

例如,如果您有一个id为5的Blog对象b,则以下内容   三个查询是相同的:

Entry.objects.filter(blog=b) # Query using object instance
Entry.objects.filter(blog=b.id) # Query using id from instance
Entry.objects.filter(blog=5) # Query using id directly

我个人在项目中通常使用entry.blog_id,因为它不会产生额外的查询。

答案 1 :(得分:1)

我认为最好的是:

Model.objects.filter(author_id=author_id) 

因为字段author_id存在于Model

Model.objects.filter(author_id=author_obj.id)。这将对find author_obj执行一个查询,并在其中获取字段id