如果对象存在,我如何获取它,或者如果它在 Django 中不存在,我如何获取它?

新手上路,请多包涵

当我要求模型管理器获取对象时,当没有匹配的对象时,它会引发 DoesNotExist

 go = Content.objects.get(name="baby")

而不是 DoesNotExist ,我怎么能有 goNone

原文由 TIMEX 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 651
2 个回答

没有“内置”方法可以做到这一点。 Django 每次都会引发 DoesNotExist 异常。在 python 中处理此问题的惯用方法是将其包装在 try catch 中:

 try:
    go = SomeModel.objects.get(foo='bar')
except SomeModel.DoesNotExist:
    go = None

我所做的是继承models.Manager,像上面的代码一样创建一个 safe_get 并将该管理器用于我的模型。这样你就可以写: SomeModel.objects.safe_get(foo='bar')

原文由 Arthur Debert 发布,翻译遵循 CC BY-SA 3.0 许可协议

从 django 1.6 开始,您可以像这样使用 first() 方法:

 Content.objects.filter(name="baby").first()

原文由 FeroxTL 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题