Author: mtredinnick
Date: 2008-12-08 02:15:37 -0600 (Mon, 08 Dec 2008)
New Revision: 9601

Modified:
   django/trunk/django/db/models/base.py
   django/trunk/django/db/models/options.py
   django/trunk/django/forms/models.py
Log:
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.


Modified: django/trunk/django/db/models/base.py
===================================================================
--- django/trunk/django/db/models/base.py       2008-12-08 05:42:39 UTC (rev 
9600)
+++ django/trunk/django/db/models/base.py       2008-12-08 08:15:37 UTC (rev 
9601)
@@ -296,6 +296,16 @@
 
     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):
         """
         Saves the current instance. Override this in a subclass if you want to

Modified: django/trunk/django/db/models/options.py
===================================================================
--- django/trunk/django/db/models/options.py    2008-12-08 05:42:39 UTC (rev 
9600)
+++ django/trunk/django/db/models/options.py    2008-12-08 08:15:37 UTC (rev 
9601)
@@ -448,3 +448,4 @@
             #        objects.append(opts)
             self._ordered_objects = objects
         return self._ordered_objects
+

Modified: django/trunk/django/forms/models.py
===================================================================
--- django/trunk/django/forms/models.py 2008-12-08 05:42:39 UTC (rev 9600)
+++ django/trunk/django/forms/models.py 2008-12-08 08:15:37 UTC (rev 9601)
@@ -624,13 +624,7 @@
 
     def choice(self, obj):
         if self.field.to_field_name:
-            # FIXME: The try..except shouldn't be necessary here. But this is
-            # 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)
+            key = obj.serializable_value(self.field.to_field_name)
         else:
             key = obj.pk
         return (key, self.field.label_from_instance(obj))


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to