Commit 6f249c85 authored by Adrian Holovaty's avatar Adrian Holovaty
Browse files

Fixed #527 and #768 -- Fixed longstanding bug with OneToOneFields. All unit tests now pass

git-svn-id: http://code.djangoproject.com/svn/django/trunk@1313 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 887ed3ad
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -754,12 +754,13 @@ def method_init(opts, self, *args, **kwargs):
                    except KeyError:
                        val = f.get_default()
                else:
                    # Object instance was passed in.
                    # Special case: You can pass in "None" for related objects if it's allowed.
                    if rel_obj is None and f.null:
                        val = None
                    else:
                        try:
                            val = getattr(rel_obj, f.rel.field_name)
                            val = getattr(rel_obj, f.rel.get_related_field().attname)
                        except AttributeError:
                            raise TypeError, "Invalid value: %r should be a %s instance, not a %s" % (f.name, f.rel.to, type(rel_obj))
                setattr(self, f.attname, val)
@@ -892,7 +893,12 @@ def method_get_many_to_one(field_with_rel, self):
        mod = field_with_rel.rel.to.get_model_module()
        if val is None:
            raise getattr(mod, '%sDoesNotExist' % field_with_rel.rel.to.object_name)
        retrieved_obj = mod.get_object(**{'%s__exact' % field_with_rel.rel.field_name: val})
        other_field = field_with_rel.rel.get_related_field()
        if other_field.rel:
            params = {'%s__%s__exact' % (field_with_rel.rel.field_name, other_field.rel.field_name): val}
        else:
            params = {'%s__exact'% field_with_rel.rel.field_name: val}
        retrieved_obj = mod.get_object(**params)
        setattr(self, cache_var, retrieved_obj)
    return getattr(self, cache_var)