#35640: ModelMultipleChoiceField fail when the foreignkey remote model is a 
child
class of anohter model
-------------------------------+--------------------------------------
     Reporter:  Omar BENHAMID  |                     Type:  Bug
       Status:  new            |                Component:  Forms
      Version:  5.1            |                 Severity:  Normal
     Keywords:                 |             Triage Stage:  Unreviewed
    Has patch:  1              |      Needs documentation:  0
  Needs tests:  0              |  Patch needs improvement:  0
Easy pickings:  0              |                    UI/UX:  0
-------------------------------+--------------------------------------
 == The issue

 When a child model is used as a foreign key, forms with
 ModelMultipleChoiceField (not setting to_field_name) will systematically
 fail to validate submited values.


 == Reproduction

 models.py
 {{{
 class A(models.Model):
       pass

 class B(A):
       pass

 class C(models.Model):
       fkfield = models.ForeignKey(B, on_delete=models.CASCADE)
 }}}

 Create form with MultipleChoiceField of the foreignkey fkfield and it will
 systematically fail to validate.

 == Reason

 ModelMultipleChoiceField  uses value.pk in prepare_value to generate
 choices but uses "to_field_name" in _check_data for validation.
 default to_field_name is by default related_field.field_name which is
 "<parent>_ptr" in the case of inheriance child models, which points to the
 parent itself (not the pk).

 ModelMultipleChoiceField fail when the foreignkey remote model is a child
 class of anohter model
 == Workaround

 Use to_field_name = 'pk' when ModelMultipleChoiceField  is created.

 == Proposed fix

 Use PK in validation like in generation of choices.

 Spotted in 3.2, still exist in latest HEAD, probably existed before ...
-- 
Ticket URL: <https://code.djangoproject.com/ticket/35640>
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/01070191024df5ed-ba82d70e-5f50-40e5-8e77-ca6391bc2449-000000%40eu-central-1.amazonses.com.

Reply via email to