Opened 6 years ago
Last modified 6 years ago
#30407 closed New feature
Modelform initial values override instance values when both are set — at Initial Version
Reported by: | Alper Cugun | Owned by: | nobody |
---|---|---|---|
Component: | Forms | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
We ran into a bug (on our side) where our data was not being displayed in a ModelForm for existing instance because we were setting both initial values as the instance in the ModelForm.
Digging into the documentation it turns out that for [ModelForm initial overrides instance values https://docs.djangoproject.com/en/2.2/topics/forms/modelforms/#providing-initial-values] ("Initial values provided this way will override both initial values from the form field and values from an attached model instance.") whereas for [normal Forms initial https://docs.djangoproject.com/en/2.2/ref/forms/api/#dynamic-initial-values] does not take precedence over bound data ("These values are only displayed for unbound forms, and they’re not used as fallback values if a particular value isn’t provided."). Maybe that's my mistake for thinking a bound Form and a ModelForm with an instance are roughly equivalent.
I tracked this down to [this commit https://github.com/django/django/commit/51dc4ecf943d1dcc044ed956925760f9d480f56c] 12 years ago and it seems that nobody has complained much about this piece of code in the mean time. So maybe it isn't a problem but I think there is something to be said for reversing the precedence in ModelForm.
I've attached a draft diff to fix this.
draft patch