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):