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