本文介绍了单个对象的.Filter()与.get()?(Django)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我和一些同事就这一点进行了辩论。当您只需要一种方式时,是否有首选的方式在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()
提供specifically for this case。使用它。
选项2几乎就是get()
方法在Django中的实际实现方式,因此应该没有"性能"差异(您正在考虑它的事实表明您违反了编程的基本规则之一,即试图在编写和分析代码之前对其进行优化--直到您有了代码并可以运行它,您才知道它将如何运行,而在此之前尝试优化是一条痛苦的道路)。
这篇关于单个对象的.Filter()与.get()?(Django)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!