正确的方式来使用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.
从文档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
它看起来像你需要返回到一个元组,而不是一个单一的variables,这样做:
customer.source,created = Source.objects.get_or_create(name="Website")
get_or_create
返回一个元组。
customer.source, created = Source.objects.get_or_create(name="Website")
get_or_create()返回一个元组,
customer.source, created = Source.objects.get_or_create(name="Website")
这里created =>有一个布尔值,是否创build
customer.source =>有一个get_or_create()方法的对象。
这里是文档的链接: http : //docs.djangoproject.com/en/dev/ref/models/querysets/#get-or-create-kwargs
您遇到的问题是get_or_create
的loggingfunction。
当使用“defaults”以外的关键字参数时, 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
在@Tobu回答和@mipadi评论之后,如果对创build的标志不感兴趣,可以采用更为pythonic的方式:
customer.source, _ = Source.objects.get_or_create(name="Website")