From 86115228981b1a480a3200d2a4e30c000ac08acb Mon Sep 17 00:00:00 2001 From: Malcolm Tredinnick Date: Tue, 9 Dec 2008 06:51:23 +0000 Subject: [PATCH] [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 --- django/db/models/base.py | 17 ++++++++++++----- 1 file 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):