formdata: add |filter_by_internal_id filter (#59303)
gitea-wip/wcs/pipeline/head Build started... Details

This commit is contained in:
Lauréline Guérin 2021-12-03 10:31:53 +01:00
parent 16710ab21e
commit 4991be8979
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
3 changed files with 29 additions and 0 deletions

View File

@ -1474,6 +1474,19 @@ def test_lazy_formdata_queryset_filter(pub, variable_test_data):
tmpl = Template('{{form_objects|done|count}}')
assert tmpl.render(context) == '4'
# test |filter_by_internal_id
context = pub.substitutions.get_context_variables(mode='lazy')
tmpl = Template('{{form_objects|filter_by_internal_id:"%s"|count}}' % finished_formdata.id)
assert tmpl.render(context) == '1'
tmpl = Template('{{form_objects|filter_by_internal_id:"%s"|count}}' % '0')
assert tmpl.render(context) == '0'
tmpl = Template('{{form_objects|filter_by_internal_id:"%s"|count}}' % 'invalid value')
assert tmpl.render(context) == '0'
if pub.is_using_postgresql():
assert pub.loggederror_class.count() == 4
logged_error = pub.loggederror_class.select()[3]
assert logged_error.summary == 'Invalid value "invalid value" for "filter_by_internal_id"'
# test |filter_by_number
context = pub.substitutions.get_context_variables(mode='lazy')
tmpl = Template('{{form_objects|filter_by_number:"%s"|count}}' % finished_formdata.get_display_id())

View File

@ -675,6 +675,11 @@ def filter_by_status(queryset, status):
return queryset.filter_by_status(status)
@register.filter
def filter_by_internal_id(queryset, form_internal_id):
return queryset.filter_by_internal_id(unlazy(form_internal_id))
@register.filter
def filter_by_number(queryset, form_number):
return queryset.filter_by_number(form_number)

View File

@ -172,6 +172,17 @@ class LazyFormDefObjectsManager:
qs.pending_attr = attribute
return qs
def filter_by_internal_id(self, value):
try:
int(value)
except ValueError:
get_publisher().record_error(
_('Invalid value "%s" for "filter_by_internal_id"') % (value),
formdata=self._formdata,
)
return self.none()
return self._clone(self._criterias + [Equal('id', str(value))])
def filter_by_number(self, value):
return self._clone(self._criterias + [Equal('id_display', str(value))])