|
10 | 10 | from django.core.exceptions import ValidationError |
11 | 11 | from django.core.validators import URLValidator |
12 | 12 | from django.db.models import CASCADE, UUIDField |
| 13 | +from django.forms.widgets import Select |
13 | 14 | from django.urls import reverse |
14 | 15 | from django.urls.exceptions import NoReverseMatch |
15 | 16 | from django.utils.html import smart_urlquote |
@@ -284,16 +285,18 @@ def __init__( |
284 | 285 | if can_add_related is None: |
285 | 286 | can_add_related = admin_site.is_registered(rel.model) |
286 | 287 | self.can_add_related = can_add_related |
287 | | - # XXX: The UX does not support multiple selected values. |
288 | | - multiple = getattr(widget, "allow_multiple_selected", False) |
289 | 288 | if not isinstance(widget, AutocompleteMixin): |
290 | 289 | self.attrs["data-context"] = "available-source" |
291 | | - self.can_change_related = not multiple and can_change_related |
| 290 | + # Only single-select Select widgets are supported. |
| 291 | + supported = not getattr( |
| 292 | + widget, "allow_multiple_selected", False |
| 293 | + ) and isinstance(widget, Select) |
| 294 | + self.can_change_related = supported and can_change_related |
292 | 295 | # XXX: The deletion UX can be confusing when dealing with cascading |
293 | 296 | # deletion. |
294 | 297 | cascade = getattr(rel, "on_delete", None) is CASCADE |
295 | | - self.can_delete_related = not multiple and not cascade and can_delete_related |
296 | | - self.can_view_related = not multiple and can_view_related |
| 298 | + self.can_delete_related = supported and not cascade and can_delete_related |
| 299 | + self.can_view_related = supported and can_view_related |
297 | 300 | # To check if the related object is registered with this AdminSite. |
298 | 301 | self.admin_site = admin_site |
299 | 302 | self.use_fieldset = True |
|
0 commit comments