Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed #527 and #768 -- Fixed longstanding bug with OneToOneFields. Al…

…l unit tests now pass

git-svn-id: http://code.djangoproject.com/svn/django/trunk@1313 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 6f249c856b0723b5b7f30b36f50889e19d12c825 1 parent 887ed3a
@adrianholovaty adrianholovaty authored
Showing with 8 additions and 2 deletions.
  1. +8 −2 django/core/meta/__init__.py
View
10 django/core/meta/__init__.py
@@ -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)
Please sign in to comment.
Something went wrong with that request. Please try again.