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
This commit is contained in:
Adrian Holovaty 2005-11-20 22:18:41 +00:00
parent 887ed3ad2c
commit 6f249c856b
1 changed files with 8 additions and 2 deletions

View File

@ -754,12 +754,13 @@ def method_init(opts, self, *args, **kwargs):
except KeyError: except KeyError:
val = f.get_default() val = f.get_default()
else: else:
# Object instance was passed in.
# Special case: You can pass in "None" for related objects if it's allowed. # Special case: You can pass in "None" for related objects if it's allowed.
if rel_obj is None and f.null: if rel_obj is None and f.null:
val = None val = None
else: else:
try: try:
val = getattr(rel_obj, f.rel.field_name) val = getattr(rel_obj, f.rel.get_related_field().attname)
except AttributeError: except AttributeError:
raise TypeError, "Invalid value: %r should be a %s instance, not a %s" % (f.name, f.rel.to, type(rel_obj)) 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) 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() mod = field_with_rel.rel.to.get_model_module()
if val is None: if val is None:
raise getattr(mod, '%sDoesNotExist' % field_with_rel.rel.to.object_name) 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) setattr(self, cache_var, retrieved_obj)
return getattr(self, cache_var) return getattr(self, cache_var)