summaryrefslogtreecommitdiff
path: root/tests/modeltests/custom_pk/fields.py
diff options
context:
space:
mode:
authorChris Cahoon <chris.cahoon@gmail.com>2009-06-13 03:30:05 +0000
committerChris Cahoon <chris.cahoon@gmail.com>2009-06-13 03:30:05 +0000
commit6ff1f9c3ff41bf186ecc7c92bd84d3e5dbb4e9dc (patch)
tree8a0f98f1041bf3f67e45dd9b34db7c738ddfceb9 /tests/modeltests/custom_pk/fields.py
parent17fb7b7d5a59652fedea3f30e38a597404c1c867 (diff)
Fixed #10785 -- Corrected a case for foreign key lookup where the related object is a custom primary key. Thanks to Alex Gaynor for the patch.
git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2009/http-wsgi-improvements@11000 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests/modeltests/custom_pk/fields.py')
-rw-r--r--tests/modeltests/custom_pk/fields.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/modeltests/custom_pk/fields.py b/tests/modeltests/custom_pk/fields.py
new file mode 100644
index 0000000000..319e42f974
--- /dev/null
+++ b/tests/modeltests/custom_pk/fields.py
@@ -0,0 +1,54 @@
+import random
+import string
+
+from django.db import models
+
+class MyWrapper(object):
+ def __init__(self, value):
+ self.value = value
+
+ def __repr__(self):
+ return "<%s: %s>" % (self.__class__.__name__, self.value)
+
+ def __unicode__(self):
+ return self.value
+
+ def __eq__(self, other):
+ if isinstance(other, self.__class__):
+ return self.value == other.value
+ return self.value == other
+
+class MyAutoField(models.CharField):
+ __metaclass__ = models.SubfieldBase
+
+ def __init__(self, *args, **kwargs):
+ kwargs['max_length'] = 10
+ super(MyAutoField, self).__init__(*args, **kwargs)
+
+ def pre_save(self, instance, add):
+ value = getattr(instance, self.attname, None)
+ if not value:
+ value = MyWrapper(''.join(random.sample(string.lowercase, 10)))
+ setattr(instance, self.attname, value)
+ return value
+
+ def to_python(self, value):
+ if not value:
+ return
+ if not isinstance(value, MyWrapper):
+ value = MyWrapper(value)
+ return value
+
+ def get_db_prep_save(self, value):
+ if not value:
+ return
+ if isinstance(value, MyWrapper):
+ return unicode(value)
+ return value
+
+ def get_db_prep_value(self, value):
+ if not value:
+ return
+ if isinstance(value, MyWrapper):
+ return unicode(value)
+ return value