Opened 4 months ago
Last modified 2 weeks ago
#36468 assigned Bug
Popup stays blank after adding a related object when filter_horizontal is used — at Version 1
| Reported by: | Juan Rocha | Owned by: | |
|---|---|---|---|
| Component: | contrib.admin | Version: | 5.2 |
| Severity: | Normal | Keywords: | filter_horizontal; SelectBox; add_to_cache; |
| Cc: | Triage Stage: | Accepted | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
When using the "Add another" popup for a *ForeignKey field* in the Django admin and the same ModelAdmin has a ManyToManyField with *filter_horizontal*, the popup window does not close properly after adding the related object.
Instead, the popup remains open and white (blank), and the browser console throws the following error:
:8000/static/admin/js/SelectBox.js:60 Uncaught TypeError: Cannot read properties of undefined (reading 'push')
at Object.add_to_cache (:8000/static/admin/js/SelectBox.js:60:33)
at :8000/static/admin/j…ctLookups.js:115:31
at NodeList.forEach (<anonymous>)
at updateRelatedSelectsOptions (:8000/static/admin/j…ctLookups.js:103:24)
at dismissAddRelatedObjectPopup (:8000/static/admin/j…ctLookups.js:133:17)
at popup_response.js:12:16
add_to_cache @ :8000/static/admin/js/SelectBox.js:60
(anonymous) @ :8000/static/admin/j…bjectLookups.js:115
updateRelatedSelectsOptions @ :8000/static/admin/j…bjectLookups.js:103
dismissAddRelatedObjectPopup @ :8000/static/admin/j…bjectLookups.js:133
(anonymous) @ popup_response.js:12
This seems to be caused by this block in RelatedObjectLookups.js:
// Update SelectBox cache for related fields.
if (typeof SelectBox !== "undefined" && SelectBox.cache[currentSelect.id]) {
SelectBox.add_to_cache(select.id, option);
SelectBox.redisplay(select.id);
}
Steps to Reproduce
- Register a ModelAdmin with:
- A ForeignKey field (with an "Add another" popup)
- A ManyToManyField using filter_horizontal
- Click the "Add another" button next to the ForeignKey field
- In the popup, add the new object and submit
- The popup window stays open with a white screen
- Console shows a JavaScript error from SelectBox.js
Regression
This bug was introduced in commit:
https://github.com/django/django/commit/cd0479ff764272add5e0aba2afcf5649a241ca00
Expected Behavior
The popup should close normally and update the original select field with the new object, as it does when filter_horizontal is not present.
Workaround
Commenting out or removing the SelectBox.add_to_cache and SelectBox.redisplay lines in RelatedObjectLookups.js avoids the error and restores expected behavior.
Version
- Django 5.2.X
- Reproducible in the default admin interface