我试图使用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在我的表单中的一些字段,但当我尝试这样做时,我得到了一个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()返回一个元组:
customer.source, created = Source.objects.get_or_create(name="Website")
Created→有一个布尔值,是否创建。 客户。Source→有一个get_or_create()方法对象。
其他回答
您遇到的问题是get_or_create的文档特性。
当使用非"defaults"的关键字参数时,get_or_create的返回值是一个实例。这就是为什么它会在返回值中显示paren。
你可以用customer。source = source .objects.get_or_create(name="Website")[0]来获得正确的值。
这里有一个文档链接: http://docs.djangoproject.com/en/dev/ref/models/querysets/#get-or-create-kwargs
重要的警告。
在使用get_or_create, https://docs.djangoproject.com/en/4.0/ref/models/querysets/之前,您应该注意以下事项。 .... 警告
这个方法是原子的,假设数据库强制关键字参数的唯一性(参见unique或unique_together)。如果关键字参数中使用的字段没有唯一性约束,对该方法的并发调用可能导致插入具有相同参数的多行。
Get_or_create()返回一个元组:
customer.source, created = Source.objects.get_or_create(name="Website")
Created→有一个布尔值,是否创建。 客户。Source→有一个get_or_create()方法对象。
在@Tobu回答和@mipadi评论之后,以一种更python的方式,如果对创建的标志不感兴趣,我会使用:
customer.source, _ = Source.objects.get_or_create(name="Website")
Get_or_create返回一个元组。
customer.source, created = Source.objects.get_or_create(name="Website")