当前位置: 首页 > 面试题库 >

Django过滤器与获取单个对象?

商辰钊
2023-03-14
问题内容

我正在与一些同事就此进行辩论。当你只期望一个对象时,是否有一种首选的方法可以在Django中检索对象?

两种明显的方法是:

try:
    obj = MyModel.objects.get(id=1)
except MyModel.DoesNotExist:
    # We have no object! Do something...
    pass

和:

objs = MyModel.objects.filter(id=1)

if len(objs) == 1:
    obj = objs[0]
else:
    # We have no object! Do something...
    pass

第一种方法在行为上似乎更正确,但是在控制流中使用异常,这可能会带来一些开销。第二个是回旋处,但永远不会引发例外。

有什么想法是可取的?哪个更有效?


问题答案:

get()是专门为这种情况提供的。用它。

选项2几乎完全是该get()方法在Django中的实际实现方式,因此应该没有“性能”差异(而且你正在考虑的事实表明你在违反编程的基本原则之一,即试图在甚至没有编写和分析代码之前就对代码进行优化-在没有代码并可以运行之前,你不知道代码将如何执行,在此之前尝试进行优化是一条痛苦的路。



 类似资料:
  • 问题内容: 我正在尝试获取最新的Django模型对象,但似乎无法成功。 这些都不起作用: 问题答案:

  • 本文向大家介绍Django 自定义过滤器,包括了Django 自定义过滤器的使用技巧和注意事项,需要的朋友参考一下 示例 过滤器允许您将函数应用于变量。此函数可以使用0或1参数。语法如下: 过滤器可以链接在一起,因此非常有效: 如果将其翻译成python,上面的代码行将给出以下内容: 在此示例中,我们将编写一个verbose_name适用于模型(实例或类)或QuerySet的自定义过滤器。它将返回

  • 问题内容: 天是用户输入以获得比(用户输入的天数)还早的结果的数字。例如,如果用户输入32天,则他们将获得30天之前的结果。 快速试用: 我的问题和尝试 来自输入字段的输入 在我的情况下,在Django中执行此操作的最佳方法是什么? 问题答案: 这样的事情将为你工作:

  • 问题内容: “过滤后的查询和过滤器”与“根查询和过滤器”之间有什么区别吗?例如 情况1: 情况2: 我在http://elasticsearch-users.115913.n3.nabble.com/Filtered-query-vs-using- filter-outside-td3960119.html中 找到了此讨论,但所引用的URL是404,并且解释过于简洁我。 请示教或提供指出这些区别的

  • 问题内容: 因此,我一直在尝试实现一种搜索功能,用户可以在其中输入关键字并查找用户。该搜索方法应该在用户的字段(例如名字,姓氏,工作等)中查找完全匹配的单词 我尝试过icontains,但也可以在单词中匹配,例如,如果用户输入“ a”,则搜索将返回包含“ a”的任何内容。(这是我本来要解决此问题之前最初要做的事情) 我试过了,但是显然可以给出一个完全匹配的结果,如果用户输入“ john”,它将跳过

  • 假设我已经定义了这些RESTendpoint: 我定义了两个过滤器(日志记录和授权),在这些过滤器中,我想获得与当前请求匹配的url模式。使用上述示例: 如果请求是一个GET到 /variables,我需要"/变量" 如果请求是一个GET到 /variables/myfancyname,我需要"/变量/{name}" 如果请求是一个PUT到 /variables/myfancyname/myval