#30407: Modelform initial values override instance values when both are set
-----------------------------+--------------------------------------
     Reporter:  Alper Cugun  |                    Owner:  nobody
         Type:  Bug          |                   Status:  new
    Component:  Forms        |                  Version:  2.2
     Severity:  Normal       |               Resolution:
     Keywords:               |             Triage Stage:  Unreviewed
    Has patch:  1            |      Needs documentation:  0
  Needs tests:  0            |  Patch needs improvement:  0
Easy pickings:  0            |                    UI/UX:  0
-----------------------------+--------------------------------------
Description changed by Alper Cugun:

Old 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.

New 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
 https://docs.djangoproject.com/en/2.2/topics/forms/modelforms/#providing-
 initial-values] initial overrides instance 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
 https://docs.djangoproject.com/en/2.2/ref/forms/api/#dynamic-initial-
 values] initial 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.

--

-- 
Ticket URL: <https://code.djangoproject.com/ticket/30407#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/063.df6555af85de989256acface5f022b22%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to