Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

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.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@9618 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 5e9c5de78a8b0c0e1700f655febfd317f4ca33ee 1 parent c006ef5
@malcolmt malcolmt authored
Showing with 12 additions and 5 deletions.
  1. +12 −5 django/db/models/base.py
View
17 django/db/models/base.py
@@ -10,7 +10,7 @@
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 @@ def _set_pk_val(self, value):
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):
Please sign in to comment.
Something went wrong with that request. Please try again.