﻿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
