summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-12-09 06:51:23 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-12-09 06:51:23 +0000
commit86115228981b1a480a3200d2a4e30c000ac08acb (patch)
treebf5fbb8bdf15fd808063dc4980d8fa476ef78cfc
parent3988cb2d2717a12f274370b864ffa7c8efe0e954 (diff)
[1.0.X] Fixed #9775 -- Fixed an oversight from r9601 and allow direct attribute
lookup in the serializable_value() method. This means that abstract parents that are multi-table children of other models(no, really!!) now work again. Backport of r9618 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@9619 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/db/models/base.py17
1 files changed, 12 insertions, 5 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py
index a561b80979..ad7c97359e 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -10,7 +10,7 @@ except NameError:
import django.db.models.manager # Imported to register signal handler.
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned, FieldError
-from django.db.models.fields import AutoField
+from django.db.models.fields import AutoField, FieldDoesNotExist
from django.db.models.fields.related import OneToOneRel, ManyToOneRel, OneToOneField
from django.db.models.query import delete_objects, Q, CollectedObjects
from django.db.models.options import Options
@@ -298,12 +298,19 @@ class Model(object):
def serializable_value(self, field_name):
"""
- Returns the value of the field name for this instance. If the field
- is a foreign key, returns the id value, instead of the object.
+ Returns the value of the field name for this instance. If the field is
+ a foreign key, returns the id value, instead of the object. If there's
+ no Field object with this name on the model, the model attribute's
+ value is returned directly.
+
Used to serialize a field's value (in the serializer, or form output,
- for example).
+ for example). Normally, you would just access the attribute directly
+ and not use this method.
"""
- field = self._meta.get_field_by_name(field_name)[0]
+ try:
+ field = self._meta.get_field_by_name(field_name)[0]
+ except FieldDoesNotExist:
+ return getattr(self, field_name)
return getattr(self, field.attname)
def save(self, force_insert=False, force_update=False):