#28316: ModelChoiceField with to_field_name fails to render a widget properly
------------------------------------------+------------------------
               Reporter:  László Károlyi  |          Owner:  nobody
                   Type:  Bug             |         Status:  new
              Component:  Forms           |        Version:  master
               Severity:  Normal          |       Keywords:
           Triage Stage:  Unreviewed      |      Has patch:  0
    Needs documentation:  0               |    Needs tests:  0
Patch needs improvement:  0               |  Easy pickings:  0
                  UI/UX:  0               |
------------------------------------------+------------------------
 Hey guys,

 I have two models something along the following:
 {{{#!python
 class M1(Model):
     code = CharField()
     name = CharField()

 class M2(Model):
     m1 = ForeignKey(to=M1)
 }}}

 I have a custom modelform, something along:

 {{{#!python

 class MyForm(ModelForm):
     m1 = ModelChoiceField(to_field_name='code')
     class Meta(object):
         model = M2
         exclude = ()
 }}}

 When I try to render this form with an instance of `M2`, because of
 `to_field_name` not being `pk` of `m1`, the form will render without the
 option pointing to `M1` selected.

 I managed to track the problem back to `BoundField.value()`, which calls
 `self.field.prepare_value(data)` with the `PK` passed to the instance of
 the `ModelChoiceField`. There, `ModelChoiceField.prepare_value()` should
 be able to know how to resolve the passed `PK` to the parameter in
 `to_field_name`, but it doesn't do it.

 Because of that, I'm forced not to pass the `to_field_name` parameter, and
 let the select widget render itself with `PK`s instead of the wished
 `code` fields.

 Please look into this, should be fairly easy to reproduce. As I could see
 from googling, [https://stackoverflow.com/questions/9827057/django-
 modelchoicefield-use-something-other-than-id#comment21720211_11522820 this
 has formerly already been a problem], and now it's present again.

--
Ticket URL: <https://code.djangoproject.com/ticket/28316>
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/050.aa387c5e88857548ea79b04cb4c1d67f%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to