#36913 closed Cleanup/optimization (fixed)
Optimise ChoiceField / MultipleChoiceField handling of duplicate submissions
| Reported by: | Jake Howard | Owned by: | Afenomamy |
|---|---|---|---|
| Component: | Forms | Version: | 6.0 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Ready for checkin | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
When a ChoiceField / MultipleChoiceField has 5 possible choices, but the form submits 25 values, the choices values are compared once per submitted value. If the submitted values are duplicates, the validation doesn't terminate early, but can still spend a lot of time unnecessarily validating values. This can be very slow when large (~30k) numbers of values are submitted.
A suggested fix is to only validate the unique submitted values (for example for val in set(value)).
This issue was reported to the Security Team, but deemed not a security issue due to the minimal impact when given reasonable input (in the bounds of the security policy).
Change History (13)
comment:1 by , 2 months ago
comment:2 by , 2 months ago
| Triage Stage: | Unreviewed → Accepted |
|---|
follow-up: 5 comment:3 by , 2 months ago
I’d like to work on this issue.
From what I understand the slowdown happens because duplicate submitted values are validated again and again. I’m thinking of validating only the unique values internally while keeping the original list unchanged so behaviour stays the same. I’ll add some tests too to make sure duplicates and invalid values are still handled correctly.
If this sounds reasonable and no one is working on this, i would like to assign the issue to myself.
comment:5 by , 2 months ago
Replying to Abhimanyu Singh Negi:
I’d like to work on this issue.
From what I understand the slowdown happens because duplicate submitted values are validated again and again. I’m thinking of validating only the unique values internally while keeping the original list unchanged so behaviour stays the same. I’ll add some tests too to make sure duplicates and invalid values are still handled correctly.
If this sounds reasonable and no one is working on this, i would like to assign the issue to myself.
This ticket has been assigned already and has been reserved to evaluate under the Djangonaut Space umbrella. Sorry!
comment:6 by , 5 weeks ago
Hello, I am Aina (Team Saturn) from Djangonaut Space. I will be looking at this ticket
comment:7 by , 5 weeks ago
| Owner: | changed from to |
|---|
comment:8 by , 3 weeks ago
| Has patch: | set |
|---|
comment:9 by , 3 weeks ago
| Description: | modified (diff) |
|---|
comment:11 by , 3 weeks ago
| Triage Stage: | Accepted → Ready for checkin |
|---|
Note that validation that submissions (and choices) are unique is being handled in a separate feature request: https://github.com/django/new-features/issues/121