django-smartbase-admin 1.0.21__py3-none-any.whl → 1.0.23__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,7 +12,7 @@ from django.contrib.admin.widgets import (
12
12
  from django.contrib.auth.forms import ReadOnlyPasswordHashWidget
13
13
  from django.core.exceptions import ValidationError
14
14
  from django.template.loader import render_to_string
15
- from django.urls import reverse, NoReverseMatch
15
+ from django.urls import reverse
16
16
  from django.utils.formats import get_format
17
17
  from django.utils.http import urlencode
18
18
  from django.utils.safestring import mark_safe
@@ -22,6 +22,7 @@ from filer.fields.file import AdminFileWidget as FilerAdminFileWidget
22
22
  from filer.fields.image import AdminImageWidget
23
23
  from filer.models import File
24
24
 
25
+ from django_smartbase_admin.admin.site import sb_admin_site
25
26
  from django_smartbase_admin.engine.admin_base_view import (
26
27
  SBADMIN_PARENT_INSTANCE_PK_VAR,
27
28
  SBADMIN_PARENT_INSTANCE_LABEL_VAR,
@@ -36,6 +37,12 @@ from django_smartbase_admin.templatetags.sb_admin_tags import (
36
37
  )
37
38
  from django_smartbase_admin.utils import is_modal
38
39
 
40
+ try:
41
+ # Django >= 5.0
42
+ from django.contrib.admin.exceptions import NotRegistered
43
+ except ImportError:
44
+ from django.contrib.admin.sites import NotRegistered
45
+
39
46
  logger = logging.getLogger(__name__)
40
47
 
41
48
 
@@ -438,21 +445,25 @@ class SBAdminAutocompleteWidget(
438
445
  return context
439
446
 
440
447
  def add_related_buttons_urls(self, parsed_value, request, context):
441
- related_model = self.model
442
- app_label = related_model._meta.app_label
443
- model_name = related_model._meta.model_name
444
-
445
448
  try:
446
- if parsed_value and self.has_view_or_change_permission(request, self.model):
447
- change_url = reverse(
448
- "sb_admin:{}_{}_change".format(app_label, model_name),
449
- args=(parsed_value,),
449
+ if hasattr(sb_admin_site, "get_model_admin"):
450
+ # Django >= 5.0
451
+ related_model_admin = sb_admin_site.get_model_admin(self.model)
452
+ else:
453
+ related_model_admin = sb_admin_site._registry.get(self.model)
454
+ if not related_model_admin:
455
+ return
456
+ if parsed_value and related_model_admin.has_view_or_change_permission(
457
+ request
458
+ ):
459
+ context["widget"]["attrs"]["related_edit_url"] = (
460
+ related_model_admin.get_detail_url(parsed_value)
461
+ )
462
+ if related_model_admin.has_add_permission(request):
463
+ context["widget"]["attrs"]["related_add_url"] = (
464
+ related_model_admin.get_new_url(request)
450
465
  )
451
- context["widget"]["attrs"]["related_edit_url"] = change_url
452
- if self.has_add_permission(request, self.model):
453
- add_url = reverse("sb_admin:{}_{}_add".format(app_label, model_name))
454
- context["widget"]["attrs"]["related_add_url"] = add_url
455
- except NoReverseMatch:
466
+ except NotRegistered:
456
467
  pass
457
468
 
458
469
  def is_multiselect(self):