Somehow I needed to dig through the source to figure this one out.. it’s not obvious.
From a forms constructor, you must access the widget and its value_from_datadict method, which must be passed a decent length of arguments (self.data, self.files, self.prefix(fieldname)).
Turns out there’s an internal function called `bound_form._raw_value(‘fieldname’)` which will get you the data without typing so much.
Why it’s so hidden? I’m not sure.
Note that you would use this when you don’t have access to the actual, post cleaned form which would have done the type conversion and validation for you.
This raw value is going to be a string.