0

我正在尝试更新对象而不是创建一个新对象。我有信息,我想检查数据库中是否已经存在此信息,即使字段存在一些差异,这意味着我手中的新信息与一个数据库相同,但只有一些字段是新的 -> 所以我只需要更新那个对象。

location, created = Location.objects.get_or_create(**loc_fields)
if created:
   num_of_new_locs+=1 #number of new locations increased
else:
   location.url= loc_fields['url']
   location.locationname = loc_fields['locationname']
   location.desc = loc_fields['desc']
   location.str_hnr = loc_fields['str_hnr']
   location.save()

但是这段代码总是在创建新对象。我的问题是,我事先不知道哪个字段可能已经改变。这就是我这样做的原因:如果 locationname 或 url 发生更改,我将创建新对象,否则我将更新现有对象..

我怎样才能做到这一点?create_or_update或者update_fields仅在 1.7dev 中,我猜。

在 django1.4 中这样做的最佳方法是什么?

4

1 回答 1

1

如果您Location通过唯一标识符查找 a 而不是尝试匹配所有字段,您的代码将按预期工作:

location, created = Location.objects.get_or_create(pk=pk)
if created:
   num_of_new_locs+=1 #number of new locations increased
else:
   location.url= loc_fields['url']
   location.locationname = loc_fields['locationname']
   location.desc = loc_fields['desc']
   location.str_hnr = loc_fields['str_hnr']
   location.save()
于 2013-10-16T02:13:05.637 回答