From 4d0f471cfc779bc62706b8dcd028d2b41677163b Mon Sep 17 00:00:00 2001 From: James Turk Date: Thu, 28 May 2015 15:07:51 -0400 Subject: [PATCH] fix issue with OneToOne not being set on from --- fkreplace/__init__.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/fkreplace/__init__.py b/fkreplace/__init__.py index 5007f91..4de821f 100644 --- a/fkreplace/__init__.py +++ b/fkreplace/__init__.py @@ -3,16 +3,22 @@ def merge(from_obj, to_obj): for related in from_obj._meta.get_all_related_objects(): accessor_name = related.get_accessor_name() varname = related.field.name - field = getattr(from_obj, accessor_name) + if related.multiple: + field = getattr(from_obj, accessor_name) field.all().update(**{varname: to_obj}) elif related.one_to_one: try: - getattr(to_obj, accessor_name) + field = getattr(from_obj, accessor_name) + try: + getattr(to_obj, accessor_name) + except Exception as e: + # doesn't exist, safe to overwrite + setattr(field, varname, to_obj) + field.save() except Exception as e: - # doesn't exist, safe to overwrite - setattr(field, varname, to_obj) - field.save() + # from_obj one to one isn't set, skip + pass else: import pdb; pdb.set_trace() raise Exception('unknown code path')