Answers:
从文档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")
save()
的多余吗?
create()
创建对象并将其保存在一个步骤中,不需要任何操作save()
get_or_create
返回一个元组。
customer.source, created = Source.objects.get_or_create(name="Website")
customer.source = Source.objects.get_or_create(name="Website")[0]
customer.source, _ = Source.objects.get_or_create(name="Website")
,因为它使得返回元组的事实更加明显,从而有助于避免将来的错误。
get_or_create()
返回一个元组:
customer.source, created = Source.objects.get_or_create(name="Website")
created
→是否创建布尔值。
customer.source
→有一个get_or_create()
方法的对象。
您遇到的问题是的已记录功能get_or_create
。
当使用除“默认值”以外的关键字参数时,的返回值get_or_create
是一个实例。这就是为什么它向您显示返回值中的括号。
您可以customer.source = Source.objects.get_or_create(name="Website")[0]
用来获取正确的值。
这是文档的链接:http : //docs.djangoproject.com/en/dev/ref/models/querysets/#get-or-create-kwargs