Opened 3 months ago
Closed 3 months ago
#36468 closed Bug (worksforme)
Popup stays blank after adding a related object when filter_horizontal is used
Reported by: | Juan Rocha | Owned by: | |
---|---|---|---|
Component: | contrib.admin | Version: | 5.2 |
Severity: | Normal | Keywords: | filter_horizontal; SelectBox; add_to_cache; |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | 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
Change History (2)
comment:1 by , 3 months ago
Description: | modified (diff) |
---|
comment:2 by , 3 months ago
Resolution: | → worksforme |
---|---|
Status: | new → closed |
Hello Juan, thank you for your report. I'm not being able to reproduce: I'm using the models from #35331 (
State
andTransition
) and after your step 3, the pop closes just fine.Can you please share a test project or some tests so that we can replicate and validate the issue?