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