Opened 8 months ago
Closed 4 months ago
#35331 closed Bug (fixed)
Adding a new related entry using the "+" sign from M2M field doesn't update lists.
Reported by: | Devin Cox | Owned by: | Devin Cox |
---|---|---|---|
Component: | contrib.admin | Version: | 5.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: | yes | UI/UX: | yes |
Description (last modified by )
Related to Ticket #34789, PR https://github.com/django/django/pull/17897
Models:
from django.db import models class State(models.Model): label = models.CharField(max_length=255) def __str__(self): return self.label class Transition(models.Model): source = models.ManyToManyField(State, related_name="transition_source") target = models.ForeignKey(State, related_name="transition_target", on_delete=models.CASCADE)
Admin:
from django.contrib import admin from .models import State, Transition class TransitionAdmin(admin.ModelAdmin): filter_horizontal = ['source'] admin.site.register(State) admin.site.register(Transition, TransitionAdmin)
Steps to Reproduce:
Add a State
via the "+" on the M2M field to add to the Chosen Source
column. We would expect the dropdown for the Target
to contain the new value, but it does not.
Resolution as suggested by @nessita on the provided PR:
"For this, I tracked down the issue to the selector used in dismissAddRelatedObjectPopup to decide whether to call updateRelatedSelectsOptions or not. Basically the id used in the document.getElementById is wrong for the M2M widget (but correct for the single FK field, so we may need to fix the call site to pass the proper name)"
--- a/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js +++ b/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js @@ -119,7 +119,7 @@ function dismissAddRelatedObjectPopup(win, newId, newRepr) { const name = removePopupIndex(win.name); - const elem = document.getElementById(name); + const elem = document.getElementById(name + '_from'); if (elem) { const elemName = elem.nodeName.toUpperCase(); if (elemName === 'SELECT') {
Change History (10)
comment:1 by , 8 months ago
Description: | modified (diff) |
---|---|
Summary: | When adding a new related entry using the "+" sign from M2M field, no other widgets get updated. → Adding a new related entry using the "+" sign from M2M field doesn't update lists. |
Triage Stage: | Unreviewed → Accepted |
comment:2 by , 8 months ago
Has patch: | set |
---|
comment:4 by , 8 months ago
Patch needs improvement: | unset |
---|
comment:5 by , 7 months ago
Patch needs improvement: | set |
---|
comment:6 by , 6 months ago
Patch needs improvement: | unset |
---|
comment:7 by , 5 months ago
Patch needs improvement: | set |
---|
comment:8 by , 4 months ago
Patch needs improvement: | unset |
---|
comment:9 by , 4 months ago
Triage Stage: | Accepted → Ready for checkin |
---|
https://github.com/django/django/pull/18026