Django:从过滤查询中获取第一个对象或创建
|
在Django中,queryset提供了一种名为get_or_create的方法,该方法可以返回对象或创建对象。
但是,与get方法一样,如果查询返回多个对象,则get_or_create可以引发异常。
有没有一种方法可以优雅地做到这一点:
objects = Model.manager.filter(params)
if len(objects) == 0:
obj = Model.objects.create(params)
else:
obj = objects[0]
没有找到相关结果
已邀请:
6 个回复
盛虱
编辑 如建议的那样,将过滤器后的[:1]切片(返回单个条目列表)更改为[0](返回实际对象)。问题是如果查询不匹配,它将引发异常。 这也会引发类似的异常:
再次查看问题,我不确定原始发帖人是要返回多个对象/行,还是只是在检索单个对象/行时解决引发异常的方法。 这是另一种选择?
另一个:
引发和捕获异常没有错!
鞋扣蚊冈借
遣莫捅炭
然后,确保将管理器添加到要在其上使用此模型的任何模型:
之后,您将可以像
那样使用它:
臂哦
屑凉赦
在模型管理器中,创建如下函数:
逻辑很简单。首先,尝试检索名称与查询字符串(由表单提供)匹配的第一个Category对象。如果检索失败(因为它不存在),请使用该字符串作为名称创建一个新的类别。返回结果以供您在视图中使用。
辽躺