HEH. Figured it out as I was typing up the question.
I am using a StringField with a ComputedWidget.
The edit form shows the field, but renders it simply as plain text.
atapi.StringField('Url',
mode="rw",
widget=atapi.ComputedWidget(label="Url",
description="Url set after upload",
visible = { 'edit' :'visible',
'view' : 'visible' },
),
),
Hope this helps someone else.