misc: |filter_value and integers (#50422)

This commit is contained in:
Lauréline Guérin 2021-01-22 15:36:16 +01:00
parent 568a419982
commit 9f80066e0e
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 28 additions and 13 deletions

View File

@ -1062,12 +1062,12 @@ def test_lazy_formdata_queryset_filter(pub, variable_test_data):
data_class = lazy_formdata._formdef.data_class()
for i in range(6):
formdata = data_class()
formdata.data = {'0': 'bar', 'bo1': 'plop1'}
formdata.data = {'0': 'bar', '1': True, 'bo1': 'plop1', '10': '3'}
formdata.just_created()
formdata.store()
for i in range(4):
formdata = data_class()
formdata.data = {'0': 'foo', '3': datetime.date(2018, 7, 31).timetuple(), 'bo1': 'plop2'}
formdata.data = {'0': 'foo', '1': False, '3': datetime.date(2018, 7, 31).timetuple(), 'bo1': 'plop2', '10': '4'}
formdata.just_created()
formdata.jump_status('finished')
formdata.store()
@ -1113,6 +1113,24 @@ def test_lazy_formdata_queryset_filter(pub, variable_test_data):
logged_error = pub.loggederror_class.select()[1]
assert logged_error.summary == 'Invalid value "not a date" for filter "datefield"'
queryset = lazy_formdata.objects.filter_by('boolfield').apply_filter_value(True)
assert queryset.count == 6
queryset = lazy_formdata.objects.filter_by('boolfield').apply_filter_value(1)
assert queryset.count == 6
queryset = lazy_formdata.objects.filter_by('boolfield').apply_filter_value('yes')
assert queryset.count == 6
queryset = lazy_formdata.objects.filter_by('boolfield').apply_filter_value(False)
assert queryset.count == 5
queryset = lazy_formdata.objects.filter_by('boolfield').apply_filter_value(0)
assert queryset.count == 5
queryset = lazy_formdata.objects.filter_by('term1').apply_filter_value('3')
assert queryset.count == 7
queryset = lazy_formdata.objects.filter_by('term1').apply_filter_value(3)
assert queryset.count == 7
queryset = lazy_formdata.objects.filter_by('term1').apply_filter_value('foobar')
assert queryset.count == 0
# filter function on backoffice field
queryset = lazy_formdata.objects.filter_by('backoffice_blah').apply_filter_value('plop1')
assert queryset.count == 6
@ -1167,8 +1185,11 @@ def test_lazy_formdata_queryset_filter(pub, variable_test_data):
pub.substitutions.feed(formdata)
tmpl = Template('{{form_objects|filter_by:"foo_foo"|filter_value:form_var_foo_foo|count}}')
assert tmpl.render(context) == '7'
tmpl = Template('{{form.objects|filter_by:"foo_foo"|filter_value:form_var_foo_foo|count}}')
tmpl = Template('{{form_objects|filter_by:"datefield"|filter_value:form_var_datefield|count}}')
assert tmpl.render(context) == '5'
tmpl = Template('{{form_objects|filter_by:"boolfield"|filter_value:form_var_boolfield|count}}')
assert tmpl.render(context) == '5'
tmpl = Template('{{form_objects|filter_by:"term1"|filter_value:form_var_term1|count}}')
assert tmpl.render(context) == '7'
tmpl = Template('{{form.objects|exclude_self|filter_by:"foo_foo"|filter_value:form_var_foo_foo|count}}')

View File

@ -16,7 +16,6 @@
import warnings
from django.utils import six
from django.utils.encoding import force_text
from django.utils.functional import SimpleLazyObject
@ -26,7 +25,7 @@ from pyproj import Geod
from .qommon import misc, force_str, _
from .qommon.evalutils import make_datetime
from .qommon.templatetags.qommon import parse_date, parse_datetime
from .qommon.templatetags.qommon import parse_datetime
from .qommon.storage import (Or, Equal, NotEqual, Null)
from .qommon.substitution import CompatibilityNamesDict
@ -170,11 +169,6 @@ class LazyFormDefObjectsManager(object):
qs.pending_attr = attribute
return qs
def format_value(self, field, value):
if field.key != 'date':
return value
return parse_date(value).timetuple()
def get_field(self, key):
for field in self._formdef.get_all_fields():
if getattr(field, 'varname', None) == key:
@ -189,7 +183,7 @@ class LazyFormDefObjectsManager(object):
return self.none()
try:
value = self.format_value(field, value)
value = field.convert_value_from_anything(value)
except (ValueError, AttributeError):
get_publisher().record_error(_('Invalid value "%s" for filter "%s"') % (value, self.pending_attr), formdata=self._formdata)
return self.none()
@ -286,7 +280,7 @@ class LazyList(object):
field = self._lazy_manager.get_field(self._key)
if field is not None:
try:
value = self._lazy_manager.format_value(field, value)
value = field.convert_value_from_anything(value)
except (ValueError, AttributeError):
pass
return value in list(self)