Author: adrian
Date: 2006-07-13 16:31:53 -0500 (Thu, 13 Jul 2006)
New Revision: 3338

Modified:
   django/trunk/django/db/models/fields/related.py
Log:
Fixed bug in manipulator_valid_rel_key -- it assumed the related object was 
related by the primary-key field, whereas this didn't work with ForeignKeys to 
non-primary-key fields

Modified: django/trunk/django/db/models/fields/related.py
===================================================================
--- django/trunk/django/db/models/fields/related.py     2006-07-13 03:52:41 UTC 
(rev 3337)
+++ django/trunk/django/db/models/fields/related.py     2006-07-13 21:31:53 UTC 
(rev 3338)
@@ -23,7 +23,7 @@
     name = field.rel.to
     module = rel_cls.__module__
     key = (module, name)
-    # Has the model already been loaded? 
+    # Has the model already been loaded?
     # If so, resolve the string reference right away
     model = get_model(rel_cls._meta.app_label,field.rel.to)
     if model:
@@ -46,7 +46,7 @@
     "Validates that the value is a valid foreign key"
     klass = f.rel.to
     try:
-        klass._default_manager.get(pk=field_data)
+        klass._default_manager.get(**{f.rel.field_name: field_data})
     except klass.DoesNotExist:
         raise validators.ValidationError, _("Please enter a valid %s.") % 
f.verbose_name
 
@@ -79,11 +79,11 @@
         self.contribute_to_related_class(other, related)
 
     def get_db_prep_lookup(self, lookup_type, value):
-        # If we are doing a lookup on a Related Field, we must be 
-        # comparing object instances. The value should be the PK of value, 
+        # If we are doing a lookup on a Related Field, we must be
+        # comparing object instances. The value should be the PK of value,
         # not value itself.
         def pk_trace(value):
-            # Value may be a primary key, or an object held in a relation. 
+            # Value may be a primary key, or an object held in a relation.
             # If it is an object, then we need to get the primary key value for
             # that object. In certain conditions (especially one-to-one 
relations),
             # the primary key may itself be an object - so we need to keep 
drilling
@@ -94,8 +94,8 @@
                     v = getattr(v, v._meta.pk.name)
             except AttributeError:
                 pass
-            return v 
-            
+            return v
+
         if lookup_type == 'exact':
             return [pk_trace(value)]
         if lookup_type == 'in':
@@ -103,7 +103,7 @@
         elif lookup_type == 'isnull':
             return []
         raise TypeError, "Related Field has invalid lookup: %s" % lookup_type
-            
+
     def _get_related_query_name(self, opts):
         # This method defines the name that can be used to identify this 
related object
         # in a table-spanning query. It uses the lower-cased object_name by 
default,


--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to