【问题标题】:Django Get and FilterDjango 获取和过滤
【发布时间】:2018-04-17 18:56:47
【问题描述】:

我有一个关于 django 的设计问题。

有人可以向我解释为什么 Django ORM 'get' 不返回 queryset 吗? 据我所知,queryset 应该/是数据库查询的结果。按照这个逻辑,get 查询不是queryset吗?

另外,根据我对这个问题的研究,我发现get 查询调用模型managerqueryset 没有。

这一切背后有什么原因吗?

【问题讨论】:

标签: django django-orm


【解决方案1】:

来自 django 文档queryset api reference

如果找到多个对象,

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

而过滤器返回一组与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但不过滤,它将返回模型类实例表单中的所有行

顺便说一句,两者都使用缓存属性

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 2021-08-29
    • 2018-05-12
    • 2010-11-04
    相关资源
    最近更新 更多