Python 是否有更简单的方法来创建或重新写入现有对象?德扬戈
我知道在django中,我们可以通过使用这样的东西轻松创建对象模型Python 是否有更简单的方法来创建或重新写入现有对象?德扬戈,python,django,object,Python,Django,Object,我知道在django中,我们可以通过使用这样的东西轻松创建对象模型 new = AbcModel.objects.create(field1='a') new[0].field2 = 'c' new[0].save() AbcModel.objects.createfield1='a',field2='b' 但这将创建对象,即使它已经存在。 我知道我可以使用过滤器,然后使用存在来检查对象是否已经存在,然后决定更新或创建 但是,有没有更简单、更快的方法来做到这一点?因为有get_或create,
new = AbcModel.objects.create(field1='a')
new[0].field2 = 'c'
new[0].save()
AbcModel.objects.createfield1='a',field2='b'
但这将创建对象,即使它已经存在。
我知道我可以使用过滤器,然后使用存在来检查对象是否已经存在,然后决定更新或创建
但是,有没有更简单、更快的方法来做到这一点?因为有get_或create,所以我很好奇是否有类似的东西
提前谢谢
编辑:
我想到了这样的事情
new = AbcModel.objects.create(field1='a')
new[0].field2 = 'c'
new[0].save()
可能会有更多的字段,字段1不一定总是a,也可能是其他字段,如b、c,也可能是a
只是想知道是否有一种更简单、更快的方法,而不是说“获取”或“创建”不会得到我想要/需要的东西,正如你所说的,你可以这样做:
abc_实例,created=AbcModel.objects.get_或_createfield1='a',field2='b'
这会将existing/created对象作为第一个参数,将布尔值作为第二个参数,用于定义是否获取或创建了该对象
此外,field1和field2将用于过滤器,但您可以设置defaults属性,该属性将更新现有条目或用于其创建
abc_instance, created = AbcModel.objects.get_or_create(
field1='a', field2='b',
defaults={'field3': 'c', 'field4': 'd'}
)
您可以使用更新或创建:
但是,如果筛选依据的字段不是唯一的,则可能最终会出现MultipleObjectsReturned异常
另一种方法是:
num_updated = AbcModel.objects.filter(field1='a').update(field2='c')
if num_updated == 0:
model = AbcModel.objects.create(field1='a', field2='c')
在num_updated中,您将在第一行代码中更新行数
我希望这有点帮助 get_或_create不做您希望它做的事情是什么?可能重复的