The first step in fixing a group of problems related to outputting a proper

"value" for a field that is a relation to another model.

This part adds the utility method on Model that should help in general.Also
cleans up the slightly ugly mess from r8957.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@9601 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Malcolm Tredinnick 2008-12-08 08:15:37 +00:00
parent fa7aa7255c
commit d662ef5540
3 changed files with 12 additions and 7 deletions

View File

@ -296,6 +296,16 @@ class Model(object):
pk = property(_get_pk_val, _set_pk_val) pk = property(_get_pk_val, _set_pk_val)
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.
Used to serialize a field's value (in the serializer, or form output,
for example).
"""
field = self._meta.get_field_by_name(field_name)[0]
return getattr(self, field.attname)
def save(self, force_insert=False, force_update=False): def save(self, force_insert=False, force_update=False):
""" """
Saves the current instance. Override this in a subclass if you want to Saves the current instance. Override this in a subclass if you want to

View File

@ -448,3 +448,4 @@ class Options(object):
# objects.append(opts) # objects.append(opts)
self._ordered_objects = objects self._ordered_objects = objects
return self._ordered_objects return self._ordered_objects

View File

@ -624,13 +624,7 @@ class ModelChoiceIterator(object):
def choice(self, obj): def choice(self, obj):
if self.field.to_field_name: if self.field.to_field_name:
# FIXME: The try..except shouldn't be necessary here. But this is key = obj.serializable_value(self.field.to_field_name)
# going in just before 1.0, so I want to be careful. Will check it
# out later.
try:
key = getattr(obj, self.field.to_field_name).pk
except AttributeError:
key = getattr(obj, self.field.to_field_name)
else: else:
key = obj.pk key = obj.pk
return (key, self.field.label_from_instance(obj)) return (key, self.field.label_from_instance(obj))