Yeah, well... That's the way I implemented it the first time. As it turns out, it makes contribute_to_class difficult to handle properly, because sometimes you want to call the ancestors' method, but still do some extra post-processing before preparing the field, but the topmost superclass would have called prepare already. So, to make this possible, I added a new keyword argument to contribute_to_class and that didn't make it any more straightforward.

So, in the end I went for this which doesn't require explicitly passing down an extra argument, which is more backwards-compatible for people creating their own field types (we do document that, AFAIR).