我对django有一个设计问题。
有人可以向我解释为什么Django ORM
'get'不会返回queryset
吗?
据我所知,queryset
应该是db查询的结果。根据该逻辑,get
查询不是queryset
?
此外,根据我对这个问题的研究,我发现get
查询调用了模型manager
,而queryset
没有。{/ p>
所有这一切背后都有推理吗?
答案 0 :(得分:0)
来自django文档queryset api reference
如果找到多个对象,get()会引发MultipleObjectsReturned。 MultipleObjectsReturned异常是模型类的属性。
while过滤器返回一组与QuerySet
例如:
A=Model.objects.get(id=1)
B=Model.objects.filter(id=1)
print(isinstance(A,Model)) # True
print(isinstance(B,QuerySet)) # True
select * from public.app_model where id=1;
select * from public.app_model where id=1;
但是在实现get
必须返回一个实例,如果查询返回的行超过1行,它将引发MultipleObjectsReturned
但是不过滤,它将返回Model类实例表单中的所有行
BTW,两者都使用缓存属性