Tom,
I was curious about the web view issue, so I poked around a bit. After debugging, I noticed my overridden 'get_serializer_class' was getting called twice, which makes sense for the ListCreate view. Once to to know how to display the list, and again to know how to display the form. I thought I may be able to determine which scenario was calling the method, but only self instance of the view is available inside the method.
Tracing through the list scenario:
ListModelMixin list() gets the serializer
Tracing through the create scenario:
BrowsableAPIRenderer method get_form() call view.get_serializer, then calls serializer_to_form_fields(serializer), where the 'read_only' attribute is read for all the fields.
Just brainstorming, but what about these 2 options:
1) Create something like a 'write_only' attribute in the Field class. This would by more DRY for the serializers, though I'm not sure about the implementation. For example, it doesn't make sense to have read_only=True and write_only=True
2) For the GenericAPIView view, perhaps make an additional method like 'get_serializer_for_post' and a class variable like 'model_post_serializer_class', that if None get_serializer_for_post would return the regular model_serializer_class. Then, in BrowsableAPIRender the get_form() method could call the new get_serializer_for_post.
And, btw, many thanks for an awesome framework.
-Scott