Chained Pick Lists

Does anyone know how we could wrangle Specify form design to enable “chained” pick lists, i.e. picking something in the first list restricts the options in the next list and so on?

1 Like

Not something that is currently possible but something that has been requested numerous times.


@fedoras , that sounds interesting. Do you have any examples of things for which one might want to use this?

One example that comes to mind is picking a preparation type that would then restrict a list of preservation types for instance. There are also other more complex scenarios where for instance selecting an attribute type would then restrict the range of values that could be entered into a subsequent field - length must be between 10 and 50 but width must be between 1 and 20.

1 Like

We have opened an official feature request for this ability! You can follow along with development comments and progress here.

Thank you for submitting this request!

This is a bit off topic, but I have never heard of preservation types. What are they and what table do they go in? Or is preservation type just a preparation type? Also, preparation type is not a pick list. Nested prep. types (or prep, types and preservation types if you like) would immediately have made sense to me.

The other thing sounds like traits to me, which I would not do in Specify, but that does not mean that others cannot or should not. However, also in this example I cannot find the pick list.

The idea of chained pick lists sounds very useful to me and other people I imagine, because we think of what it looks like in the front end, namely dropdown lists. However, the first thing I think of where chained dropdown lists would be useful is genus names and species names, but those are not pick lists in Specify. That got me questioning if any of the use cases we can come up with indeed involve pick lists. We now have two more use cases that also do not involve pick lists and I think that, until there are genuine use cases, an official feature request is really premature (and also does not seem what @fedoras was asking for).

Another obvious use case I can think of is the Darwin Core establishmentMeans and degreeOfEstablishment where the value of establishmentMeans constrains the value of degreeOfEstablishment. The controlled vocabularies on these terms, however, have very few controlled terms, so a chained pick list will not really make data entry any easier and I would just have a data quality check to see afterwards if people have always done it right.

Another issue with the lack of use cases is that it is very hard to understand what ‘chained pick lists’ means or how it can be implemented. There is another feature request on this forum, User defined Trees, which is clear, comes with a use case, and might achieve what @fedoras wants to achieve with chained pick lists. It should be noted that @fedoras did not submit a feature request, which this has now somehow turned into, but merely a request for help.

I think a more useful extension of the functionality of pick lists would be to allow taxonomies, i.e. allow pick list items to have a parent, so that it would be useful for things that have taxonomies behind them, e.g. phenology or life stage or life form. Another useful extension would be the ability to select multiple values although that is more a field type than a pick list thing.

@NielsKlazenga Preservation type is used in many fluid preservative collections to indicate the preservative used - not only for final preservation but also in the many stages from field collection and fixation, to intermediary steps before final fixation. It is similarly used in tissue collections to indicate initial preservation in the field (95% ethanol, DMSO, RNALater, freezing, liquid nitrogen) as well as all subsequent preservation methods in the chain of custody so as to give an indication of potential extraction potential from tissues. Thus it would be useful to be able to select the preparation type and have it constrain a list of preservation types that apply to that preparation type. There are other such examples that I cannot think of right now. I am sure there are others who may be able to come up with some.

I think the parent:child relationship is a good example of how “chained picklists” could be implemented - one picklist based on another (its “parent”).

1 Like