使用 get_or_create 的正确方法?

新手上路,请多包涵

我正在尝试对我的表单中的某些字段使用 get_or_create,但是当我尝试这样做时出现 500 错误。

其中一行看起来像这样:

 customer.source = Source.objects.get_or_create(name="Website")

我对上面的代码得到的错误是:

 Cannot assign "(<Source: Website>, False)": "Customer.source"
   must be a "Source" instance.

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

阅读 345
2 个回答

从文档 get_or_create

 # get_or_create() a person with similar first names.

p, created = Person.objects.get_or_create(
    first_name='John',
    last_name='Lennon',
    defaults={'birthday': date(1940, 10, 9)},
)

# get_or_create() didn't have to create an object.
>>> created
False

说明: 要评估相似度的字段,必须在 defaults 之外提及。其余字段必须包含在 defaults 中。如果发生 CREATE 事件,将考虑所有字段。

看起来你需要返回一个元组,而不是一个单一的变量,这样做:

 customer.source,created = Source.objects.get_or_create(name="Website")

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

get_or_create 返回一个元组。

 customer.source, created = Source.objects.get_or_create(name="Website")

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

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