Django获取并过滤

时间:2017-11-05 14:55:03

标签: django django-orm

我对django有一个设计问题。

有人可以向我解释为什么Django ORM'get'不会返回queryset吗? 据我所知,queryset应该是db查询的结果。根据该逻辑,get查询不是queryset

此外,根据我对这个问题的研究,我发现get查询调用了模型manager,而queryset没有。{/ p>

所有这一切背后都有推理吗?

1 个答案:

答案 0 :(得分:0)

来自django文档queryset api reference

  如果找到多个对象,

get()会引发MultipleObjectsReturned。 MultipleObjectsReturned异常是模型类的属性。

while过滤器返回一组与QuerySet

实例中的查找kwargs匹配的实例

例如:

A=Model.objects.get(id=1)
B=Model.objects.filter(id=1)
print(isinstance(A,Model))  # True
print(isinstance(B,QuerySet))  # True

获取sql>>

select * from public.app_model where id=1;

过滤器sql>>

select * from public.app_model where id=1;

但是在实现get必须返回一个实例,如果查询返回的行超过1行,它将引发MultipleObjectsReturned但是不过滤,它将返回Model类实例表单中的所有行

BTW,两者都使用缓存属性