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
This commit is contained in:
Malcolm Tredinnick 2008-12-09 06:49:40 +00:00
parent c006ef5746
commit 5e9c5de78a
1 changed files with 12 additions and 5 deletions

View File

@ -10,7 +10,7 @@ except NameError:
import django.db.models.manager # Imported to register signal handler. import django.db.models.manager # Imported to register signal handler.
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned, FieldError 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.fields.related import OneToOneRel, ManyToOneRel, OneToOneField
from django.db.models.query import delete_objects, Q, CollectedObjects from django.db.models.query import delete_objects, Q, CollectedObjects
from django.db.models.options import Options from django.db.models.options import Options
@ -298,12 +298,19 @@ class Model(object):
def serializable_value(self, field_name): def serializable_value(self, field_name):
""" """
Returns the value of the field name for this instance. If the field Returns the value of the field name for this instance. If the field is
is a foreign key, returns the id value, instead of the object. 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, 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) return getattr(self, field.attname)
def save(self, force_insert=False, force_update=False): def save(self, force_insert=False, force_update=False):