Data collection with a form and an attached file for each mobile collector

Is it possible for a form to have multiple files attached for a single question "select_one_from_file" so that each mobile collector has its own file attachment.?

Hi @steeve_kevin

According to the ODK documentation, I've learned that in ODK Collect, you can add files to a form using 'select_one_from_file' or 'select_multiple_from_file'.

However, it's important to note that it mainly supports adding just one file per question. You can find more details in the documentation


Not currently. What we are hoping to do this year is to make it possible to segment an entity list by user. Each entity has an owner and with this functionality, you'd be able to say that a user should only see the entities that they own. We'll later add on more ways to specify how an entity list should be segmented across users.

For now, the only way you can achieve what you've described is to have multiple separate copies of the same form with their own entity lists or attached CSVs. For example, if you are working in different regions, you could have My Form (Region 1), My Form (Region 2) and those could have households_region1 and households_region2 entity lists. It's not ideal but we know some users do this effectively.

What's your underlying need? Is it that you want to make sure data only exists on specific devices for privacy? That users have limited bandwidth and you don't want to download large files? Or that the files you're reading are so large that the devices are having trouble querying them?

If it's one of the first two cases, multiple separate copies of the same form is the best we can offer for now.

If your issues are around devices loading the attached files, you could consider using the search() appearance/function instead of select_one_from_file. It won't work in web forms so you won't be able to make edits to those submissions. But if you're ok with that limitation, it may address your issue in the short term. You can find some documentation at If you go in that direction, you should use pulldata to get individual columns/properties from the selected items instead of instance():

1 Like