Python 是否有更简单的方法来创建或重新写入现有对象?德扬戈

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,

我知道在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()
可能会有更多的字段,字段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不做您希望它做的事情是什么?可能重复的