misc: add |getlist filter for querysets (#49400)

This commit is contained in:
Lauréline Guérin 2021-01-05 09:52:25 +01:00
parent 1575f91fa1
commit ac8c2a1acc
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 22 additions and 0 deletions

View File

@ -1213,6 +1213,19 @@ def test_lazy_formdata_queryset_filter(pub, variable_test_data):
assert LazyFormData(formdata).objects.pending().count == 7
assert LazyFormData(formdata).objects.pending().filter_by('foo_foo').apply_filter_value('foo').count == 0
# test |getlist
tmpl = Template('{% for v in form_objects|order_by:"id"|getlist:"foo_foo" %}{{ v }},{% endfor %}')
assert tmpl.render(context) == 'bar,bar,bar,bar,bar,bar,bar,foo,foo,foo,foo,'
tmpl = Template('{% if "foo" in form_objects|getlist:"foo_foo" %}OK{% else %}KO{% endif%}')
assert tmpl.render(context) == 'OK'
tmpl = Template('{% if "fooooooooooooooo" in form_objects|getlist:"foo_foo" %}OK{% else %}KO{% endif%}')
assert tmpl.render(context) == 'KO'
assert LazyFormData(formdata).objects.order_by('id').getlist('foo_foo') == [
'bar', 'bar', 'bar', 'bar', 'bar', 'bar', 'bar', 'foo', 'foo', 'foo', 'foo']
assert LazyFormData(formdata).objects.order_by('id').getlist('form_var_foo_foo') == [
'bar', 'bar', 'bar', 'bar', 'bar', 'bar', 'bar', 'foo', 'foo', 'foo', 'foo']
assert set(LazyFormData(formdata).objects.getlist('unknown')) == set([None])
def test_lazy_formdata_queryset_get_from_first(pub, variable_test_data):
context = pub.substitutions.get_context_variables(mode='lazy')

View File

@ -184,6 +184,15 @@ class LazyFormDefObjectsManager(object):
get_publisher().record_error(_('Invalid filter "%s"') % self.pending_attr, formdata=self._formdata)
return self.none()
def getlist(self, key):
values = []
for lazy_formdata in self:
value = lazy_formdata.get(key)
if value is not None:
value = value.get_value()
values.append(value)
return values
def __getattr__(self, attribute):
if attribute.startswith('count_status_'):
# backward compatibility