Move to a collector based approach.

Except in gis, where we might not really need it. By default, keep the
field level API of from_db_value()