Django 面试题
目录

Django 中的 get 和 filter 有什么区别?

· 约 3 分钟读完 · 第 44 / 160 章

推荐答案

在 Django 中,get 和 filter 是用于查询数据库的两个常用方法,但它们的行为和用途有显著区别:

  • get:用于查询单个对象。如果查询结果为空或返回多个对象,get 会抛出异常(DoesNotExist 或 MultipleObjectsReturned)。
  • filter:用于查询多个对象,返回一个 QuerySet。即使查询结果为空,也不会抛出异常,而是返回一个空的 QuerySet。

本题详细解读

1. get 方法

  • 用途:用于精确查询单个对象。
  • 行为:
    • 如果查询条件匹配到 一个 对象,返回该对象。
    • 如果查询条件匹配到 零个 对象,抛出 DoesNotExist 异常。
    • 如果查询条件匹配到 多个 对象,抛出 MultipleObjectsReturned 异常。
  • 示例:

2. filter 方法

  • 用途:用于查询满足条件的多个对象。
  • 行为:
    • 返回一个 QuerySet,即使查询结果为空。
    • 不会抛出异常,除非在后续操作中对 QuerySet 进行不合理的操作(如直接访问不存在的索引)。
  • 示例:

3. 主要区别

特性 get filter
返回类型 单个对象 QuerySet
查询结果为空时 抛出 DoesNotExist 异常 返回空的 QuerySet
查询结果为多个时 抛出 MultipleObjectsReturned 异常 返回包含多个对象的 QuerySet
适用场景 精确查询单个对象 查询多个对象或条件筛选

4. 使用场景建议

  • 使用 get 时,确保查询条件能够唯一确定一个对象,否则需要处理异常。
  • 使用 filter 时,适合处理可能返回多个对象或不确定查询结果的情况。

通过理解 get 和 filter 的区别,可以更合理地选择适合的查询方法,避免潜在的错误。