Author: mtredinnick
Date: 2008-07-11 04:00:35 -0500 (Fri, 11 Jul 2008)
New Revision: 7883

Modified:
   django/trunk/django/db/models/fields/__init__.py
   django/trunk/tests/regressiontests/queries/models.py
Log:
Fixed #7448 -- Convert "in" filters to pass in the correct values for datetimes
and similar complex objects.

Based on patches from cgrady and alexkosholev. Refs #7707.


Modified: django/trunk/django/db/models/fields/__init__.py
===================================================================
--- django/trunk/django/db/models/fields/__init__.py    2008-07-11 07:34:11 UTC 
(rev 7882)
+++ django/trunk/django/db/models/fields/__init__.py    2008-07-11 09:00:35 UTC 
(rev 7883)
@@ -554,7 +554,7 @@
             raise validators.ValidationError, _('Enter a valid date in 
YYYY-MM-DD format.')
 
     def get_db_prep_lookup(self, lookup_type, value):
-        if lookup_type == 'range':
+        if lookup_type in ('range', 'in'):
             value = [smart_unicode(v) for v in value]
         elif lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte') and 
hasattr(value, 'strftime'):
             value = value.strftime('%Y-%m-%d')
@@ -641,7 +641,7 @@
         return Field.get_db_prep_save(self, value)
 
     def get_db_prep_lookup(self, lookup_type, value):
-        if lookup_type == 'range':
+        if lookup_type in ('range', 'in'):
             value = [smart_unicode(v) for v in value]
         else:
             value = smart_unicode(value)
@@ -720,7 +720,7 @@
         return super(DecimalField, self).get_db_prep_save(value)
 
     def get_db_prep_lookup(self, lookup_type, value):
-        if lookup_type == 'range':
+        if lookup_type in ('range', 'in'):
             value = [self._format(v) for v in value]
         else:
             value = self._format(value)
@@ -1097,7 +1097,7 @@
                 return smart_unicode(value)
         else:
             prep = smart_unicode
-        if lookup_type == 'range':
+        if lookup_type in ('range', 'in'):
             value = [prep(v) for v in value]
         else:
             value = prep(value)

Modified: django/trunk/tests/regressiontests/queries/models.py
===================================================================
--- django/trunk/tests/regressiontests/queries/models.py        2008-07-11 
07:34:11 UTC (rev 7882)
+++ django/trunk/tests/regressiontests/queries/models.py        2008-07-11 
09:00:35 UTC (rev 7883)
@@ -805,5 +805,10 @@
 >>> Related.objects.order_by('custom')
 []
 
+Bug #7448, #7707 -- Complex objects should be converted to strings before being
+used in lookups.
+>>> Item.objects.filter(created__in=[time1, time2])
+[<Item: one>, <Item: two>]
+
 """}
 


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