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