misc: add absent/existing operators for file fields (#87242) #1253
|
@ -4680,6 +4680,7 @@ def test_formdata_filtering_on_block_fields(pub):
|
|||
fields.DateField(id='4', label='Date', varname='date'),
|
||||
fields.EmailField(id='5', label='Email', varname='email'),
|
||||
fields.TextField(id='6', label='Text', varname='text'),
|
||||
fields.FileField(id='7', label='File', varname='file'),
|
||||
]
|
||||
block.store()
|
||||
|
||||
|
@ -4694,6 +4695,10 @@ def test_formdata_filtering_on_block_fields(pub):
|
|||
data_class = formdef.data_class()
|
||||
data_class.wipe()
|
||||
|
||||
upload = PicklableUpload('test.jpeg', 'image/jpeg')
|
||||
with open(os.path.join(os.path.dirname(__file__), 'image-with-gps-data.jpeg'), 'rb') as fd:
|
||||
upload.receive([fd.read()])
|
||||
|
||||
for i in range(14):
|
||||
formdata = data_class()
|
||||
formdata.data = {
|
||||
|
@ -5023,6 +5028,10 @@ def test_formdata_filtering_on_block_fields(pub):
|
|||
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_text"|%s|count}}' % operator)
|
||||
assert tmpl.render(context) == result
|
||||
|
||||
# file
|
||||
tmpl = Template('{{forms|objects:"test"|filter_by:"blockdata_file"|absent|count}}')
|
||||
assert tmpl.render(context) == '0'
|
||||
|
||||
|
||||
def test_items_field_getlist(pub):
|
||||
NamedDataSource.wipe()
|
||||
|
|
|
@ -330,6 +330,8 @@ class LazyFormDefObjectsManager:
|
|||
return equality_operators + empty_operators
|
||||
if field.key == 'email':
|
||||
return equality_operators + in_operators + empty_operators + text_operators
|
||||
if field.key == 'file':
|
||||
return empty_operators
|
||||
return None
|
||||
|
||||
def format_value(self, op, value, field):
|
||||
|
@ -499,7 +501,17 @@ class LazyFormDefObjectsManager:
|
|||
|
||||
# check operator
|
||||
for field in fields:
|
||||
if field.key not in ['date', 'item', 'items', 'string', 'text', 'bool', 'email', 'numeric']:
|
||||
if field.key not in [
|
||||
'date',
|
||||
'item',
|
||||
'items',
|
||||
'string',
|
||||
'text',
|
||||
'bool',
|
||||
'email',
|
||||
'numeric',
|
||||
'file',
|
||||
]:
|
||||
continue
|
||||
operators = self.get_field_allowed_operators(field) or []
|
||||
if op not in [o[0] for o in operators]:
|
||||
|
@ -540,7 +552,17 @@ class LazyFormDefObjectsManager:
|
|||
else:
|
||||
criteria_class = NotNull if exclude else Null
|
||||
criteria = criteria_class(field_id)
|
||||
elif field.key not in ['date', 'item', 'items', 'string', 'text', 'bool', 'email', 'numeric']:
|
||||
elif field.key not in [
|
||||
'date',
|
||||
'item',
|
||||
'items',
|
||||
'string',
|
||||
'text',
|
||||
'bool',
|
||||
'email',
|
||||
'numeric',
|
||||
'file',
|
||||
]:
|
||||
criteria_class = NotEqual if exclude else Equal
|
||||
criteria = criteria_class(field_id, value, field=field)
|
||||
else:
|
||||
|
|
Loading…
Reference in New Issue