id,summary,reporter,owner,description,type,status,component,version,severity,resolution,keywords,cc,stage,has_patch,needs_docs,needs_tests,needs_better_patch,easy,ui_ux 19553,Please make save_instance and construct_instance methods of ModelForm,Chris Wilson,nobody,"I want to use ModelForm and Generic Class-based Views to create records for an ordering/payment system (so security is important). I want to set the `user` field of the created record to the current logged-in user, without any way for them to override it. I asked the best way to do this on [[http://stackoverflow.com/questions/13729165/enforcing-values-for-some-fields-when-using-modelform/13729321#13729321|Stack Overflow]], and I didn't get any satisfactory (non-ugly) answers of how to do this. The essential problem is that: * CBVs have access to the request, but not the instance; * `ModelForm` has no access to the request (but can be given it) and only has access to the model after it's been instantiated; * `Model` has no access to the request, and its attributes are magical. The closest to a ""nice"" solution was the only answer I got so far: construct the `ModelForm` passing in the `request`, and modify the object before saving it. However `ModelForm` has no access to the object until it's saved, unless it does a `save(commit=False)` and then saves the object and its m2m relations, which is also ugly. The `save_instance` function is not a method of `ModelForm`, but it does poke a new method into the ModelForm which called it, and that's pretty ugly too: {{{ else: # We're not committing. Add a method to the form to allow deferred # saving of m2m data. form.save_m2m = save_m2m }}} I propose making `save_instance` and `construct_instance` methods of ModelForm, instead of stand-alone functions that do black magic on a ModelForm. This way, I could override `construct_instance` to modify the instance before it's saved, setting its `user` member to the one in the `request` that I saved earlier, and that's the cleanest approach that I've seen so far (minimal code, minimal magic).",Cleanup/optimization,closed,Forms,1.4,Normal,wontfix,,charette.s@…,Unreviewed,0,0,0,0,0,0