Python 使用get_或create的正确方法?
我正在尝试对表单中的某些字段使用get_或_create,但在尝试这样做时出现了500个错误 其中一行如下所示:Python 使用get_或create的正确方法?,python,django,Python,Django,我正在尝试对表单中的某些字段使用get_或_create,但在尝试这样做时出现了500个错误 其中一行如下所示: customer.source = Source.objects.get_or_create(name="Website") customer.source,created = Source.objects.get_or_create(name="Website") 以上代码的错误是: Cannot assign "(<Source: Website>, False)
customer.source = Source.objects.get_or_create(name="Website")
customer.source,created = Source.objects.get_or_create(name="Website")
以上代码的错误是:
Cannot assign "(<Source: Website>, False)": "Customer.source"
must be a "Source" instance.
无法分配“(,False)”:“Customer.source”
必须是“源”实例。
获取或创建
返回元组
customer.source, created = Source.objects.get_or_create(name="Website")
从文件中:
说明:
要评估相似性的字段必须在默认值之外提及。其余字段必须包含在默认值中。如果发生CREATE事件,将考虑所有字段
看起来您需要返回一个元组,而不是单个变量,请执行以下操作:
customer.source = Source.objects.get_or_create(name="Website")
customer.source,created = Source.objects.get_or_create(name="Website")
您遇到的问题是
get\u或\u create
的一个文档化功能
使用关键字参数而不是“defaults”时,get\u或\u create
的返回值是一个实例。这就是它在返回值中显示参数的原因
您可以使用customer.source=source.objects.get\u或\u create(name=“Website”)[0]
获取正确的值
以下是文档的链接:
返回一个元组:
customer.source, created = Source.objects.get_or_create(name="Website")
→有一个布尔值,无论是否创建已创建
→的对象为customer.source
方法get\u或\u create()
customer.source, _ = Source.objects.get_or_create(name="Website")
get\u或create方法实际上会返回一个元组 get_或_create方法的诀窍在于它实际返回(object,created)的元组。第一个元素是您试图检索的模型的实例,第二个元素是一个布尔标志,用于指示实例是否已创建。True表示该实例是由get_或_create方法创建的,False表示该实例是从数据库中检索到的 因此,您可以执行一些操作,例如获取源实例
``` customer.source = Source.objects.get_or_create(name="Website")[0]
```
或者,如果您不关心布尔标志:
customer.source=source.objects.get\u或\u create(name=“Website”)[0]
@mipadi,我更喜欢customer.source、\u=source.objects.get\u或\u create(name=“Website”)
,因为它使返回元组的事实更加明显,有助于避免将来出现错误。FYI created是一个布尔值。如果创建,则为True;如果获取,则为False附加的save()
是多余的吗?@zypro它就像create()
,创建对象并一步保存,不需要任何save()