misc: filter_by & date support (#49358)
This commit is contained in:
parent
1d63253d31
commit
17e78f2602
|
@ -1063,7 +1063,7 @@ def test_lazy_formdata_queryset_filter(pub, variable_test_data):
|
|||
formdata.store()
|
||||
for i in range(4):
|
||||
formdata = data_class()
|
||||
formdata.data = {'0': 'foo', 'bo1': 'plop2'}
|
||||
formdata.data = {'0': 'foo', '3': datetime.date(2018, 7, 31).timetuple(), 'bo1': 'plop2'}
|
||||
formdata.just_created()
|
||||
formdata.jump_status('finished')
|
||||
formdata.store()
|
||||
|
@ -1094,6 +1094,21 @@ def test_lazy_formdata_queryset_filter(pub, variable_test_data):
|
|||
logged_error = pub.loggederror_class.select()[0]
|
||||
assert logged_error.summary == 'Invalid filter "unknown"'
|
||||
|
||||
queryset = lazy_formdata.objects.filter_by('datefield').apply_filter_value(datetime.date(2018, 7, 31).timetuple())
|
||||
assert queryset.count == 5
|
||||
queryset = lazy_formdata.objects.filter_by('datefield').apply_filter_value(datetime.date(2018, 7, 31))
|
||||
assert queryset.count == 5
|
||||
queryset = lazy_formdata.objects.filter_by('datefield').apply_filter_value(datetime.datetime(2018, 7, 31))
|
||||
assert queryset.count == 5
|
||||
queryset = lazy_formdata.objects.filter_by('datefield').apply_filter_value('2018-07-31')
|
||||
assert queryset.count == 5
|
||||
queryset = lazy_formdata.objects.filter_by('datefield').apply_filter_value('not a date')
|
||||
assert queryset.count == 0
|
||||
if pub.is_using_postgresql():
|
||||
assert pub.loggederror_class.count() == 2
|
||||
logged_error = pub.loggederror_class.select()[1]
|
||||
assert logged_error.summary == 'Invalid value "not a date" for filter "datefield"'
|
||||
|
||||
# filter function on backoffice field
|
||||
queryset = lazy_formdata.objects.filter_by('backoffice_blah').apply_filter_value('plop1')
|
||||
assert queryset.count == 6
|
||||
|
|
|
@ -26,7 +26,7 @@ from pyproj import Geod
|
|||
|
||||
from .qommon import misc, force_str, _
|
||||
from .qommon.evalutils import make_datetime
|
||||
from .qommon.templatetags.qommon import parse_datetime
|
||||
from .qommon.templatetags.qommon import parse_date, parse_datetime
|
||||
from .qommon.storage import (Or, Equal, NotEqual, Null)
|
||||
from .qommon.substitution import CompatibilityNamesDict
|
||||
|
||||
|
@ -163,11 +163,24 @@ class LazyFormDefObjectsManager(object):
|
|||
|
||||
def apply_filter_value(self, value):
|
||||
assert self.pending_attr
|
||||
|
||||
def format_value(field, value):
|
||||
if field.key != 'date':
|
||||
return value
|
||||
return parse_date(value).timetuple()
|
||||
|
||||
for field in self._formdef.get_all_fields():
|
||||
if getattr(field, 'varname', None) == self.pending_attr:
|
||||
try:
|
||||
value = format_value(field, value)
|
||||
except (ValueError, AttributeError):
|
||||
get_publisher().record_error(_('Invalid value "%s" for filter "%s"') % (value, self.pending_attr), formdata=self._formdata)
|
||||
return self.none()
|
||||
|
||||
from wcs import sql
|
||||
criteria = Equal(sql.get_field_id(field), value)
|
||||
return self._clone(self._criterias + [criteria])
|
||||
|
||||
get_publisher().record_error(_('Invalid filter "%s"') % self.pending_attr, formdata=self._formdata)
|
||||
return self.none()
|
||||
|
||||
|
|
Loading…
Reference in New Issue