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. git-svn-id: http://code.djangoproject.com/svn/django/trunk@7883 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
1e00458521
commit
7936c0b917
|
@ -554,7 +554,7 @@ class DateField(Field):
|
||||||
raise validators.ValidationError, _('Enter a valid date in YYYY-MM-DD format.')
|
raise validators.ValidationError, _('Enter a valid date in YYYY-MM-DD format.')
|
||||||
|
|
||||||
def get_db_prep_lookup(self, lookup_type, 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]
|
value = [smart_unicode(v) for v in value]
|
||||||
elif lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte') and hasattr(value, 'strftime'):
|
elif lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte') and hasattr(value, 'strftime'):
|
||||||
value = value.strftime('%Y-%m-%d')
|
value = value.strftime('%Y-%m-%d')
|
||||||
|
@ -641,7 +641,7 @@ class DateTimeField(DateField):
|
||||||
return Field.get_db_prep_save(self, value)
|
return Field.get_db_prep_save(self, value)
|
||||||
|
|
||||||
def get_db_prep_lookup(self, lookup_type, 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]
|
value = [smart_unicode(v) for v in value]
|
||||||
else:
|
else:
|
||||||
value = smart_unicode(value)
|
value = smart_unicode(value)
|
||||||
|
@ -720,7 +720,7 @@ class DecimalField(Field):
|
||||||
return super(DecimalField, self).get_db_prep_save(value)
|
return super(DecimalField, self).get_db_prep_save(value)
|
||||||
|
|
||||||
def get_db_prep_lookup(self, lookup_type, 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]
|
value = [self._format(v) for v in value]
|
||||||
else:
|
else:
|
||||||
value = self._format(value)
|
value = self._format(value)
|
||||||
|
@ -1097,7 +1097,7 @@ class TimeField(Field):
|
||||||
return smart_unicode(value)
|
return smart_unicode(value)
|
||||||
else:
|
else:
|
||||||
prep = smart_unicode
|
prep = smart_unicode
|
||||||
if lookup_type == 'range':
|
if lookup_type in ('range', 'in'):
|
||||||
value = [prep(v) for v in value]
|
value = [prep(v) for v in value]
|
||||||
else:
|
else:
|
||||||
value = prep(value)
|
value = prep(value)
|
||||||
|
|
|
@ -805,5 +805,10 @@ Bug #7371
|
||||||
>>> Related.objects.order_by('custom')
|
>>> 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>]
|
||||||
|
|
||||||
"""}
|
"""}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue