Opened 5 years ago

Last modified 5 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.

Change History (1)

by Alper Cugun, 5 years ago

draft patch

Note: See TracTickets for help on using tickets.
Back to Top