Ok, I'll take a look at the _pre_save() mechanism. By the way, isn't that one of the things changing in magic-removal branch?
I still wonder about the default values question though. I tried to create a Django object in an interactive Python shell, and the fields are indeed filled with default values. So somewhere in the form/manipulator mechanism there are unnecessary checks which prevent this from happening and raise errors instead. I'd like to research and maybe make a patch for this unless the current behavior is intended with a good reason.