#36468: Popup stays blank after adding a related object when filter_horizontal 
is
used
-------------------------------------+-------------------------------------
     Reporter:  Juan Rocha           |                    Owner:  (none)
         Type:  Bug                  |                   Status:  new
    Component:  contrib.admin        |                  Version:  5.2
     Severity:  Normal               |               Resolution:
     Keywords:  filter_horizontal;   |             Triage Stage:
  SelectBox; add_to_cache;           |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Description changed by Juan Rocha:

Old description:

> 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
> 1. Register a ModelAdmin with:
>   * A ForeignKey field (with an "Add another" popup)
>   * A ManyToManyField using filter_horizontal
>
> 2. Click the "Add another" button next to the ForeignKey field
> 3. In the popup, add the new object and submit
> 4. The popup window stays open with a white screen
> 5. Console shows a JavaScript error from SelectBox.js
>

> === 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

New description:

 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
 1. Register a ModelAdmin with:
   * A ForeignKey field (with an "Add another" popup)
   * A ManyToManyField using filter_horizontal

 2. Click the "Add another" button next to the ForeignKey field
 3. In the popup, add the new object and submit
 4. The popup window stays open with a white screen
 5. 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

--
-- 
Ticket URL: <https://code.djangoproject.com/ticket/36468#comment:1>
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 django-updates+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/django-updates/010701977de06c03-eadfb836-1a31-4bcf-ab57-87f5cb0c0f32-000000%40eu-central-1.amazonses.com.

Reply via email to