如何在Django中使用“get_or_create()”?
我正在尝试在我的表单中使用 get_or_create()
,但是每次这样做时都会出现500错误。
其中一行代码是这样的:
customer.source = Source.objects.get_or_create(name="Website")
我在上面的代码中遇到的错误是:
无法分配 "(<Source: Website>, False)": "Customer.source" 必须是一个 "Source" 实例。
8 个回答
33
get_or_create()
方法会返回一个元组:
customer.source, created = Source.objects.get_or_create(name="Website")
created
→ 是一个布尔值,表示是否新创建了一个对象。customer.source
→ 是通过get_or_create()
方法得到的对象。
42
get_or_create
这个函数会返回一个元组。
customer.source, created = Source.objects.get_or_create(name="Website")
517
根据文档中的说明 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
中。如果发生创建事件,所有字段都会被考虑在内。
看起来你需要返回一个元组,而不是单个变量,可以这样做:
customer.source,created = Source.objects.get_or_create(name="Website")