#20048 add get_action_url utility function

This commit is contained in:
Arthur 2025-08-07 14:18:12 -07:00
parent 976d20f48c
commit a4975720d4
2 changed files with 6 additions and 8 deletions

View File

@ -21,7 +21,7 @@ from utilities.permissions import get_permission_for_model
from utilities.proxy import resolve_proxies from utilities.proxy import resolve_proxies
from utilities.querydict import dict_to_querydict from utilities.querydict import dict_to_querydict
from utilities.templatetags.builtins.filters import render_markdown from utilities.templatetags.builtins.filters import render_markdown
from utilities.views import get_viewname from utilities.views import get_action_url
from .utils import register_widget from .utils import register_widget
__all__ = ( __all__ = (
@ -53,7 +53,7 @@ def object_list_widget_supports_model(model: Model) -> bool:
""" """
def can_resolve_model_list_view(model: Model) -> bool: def can_resolve_model_list_view(model: Model) -> bool:
try: try:
reverse(get_viewname(model, action='list')) reverse(get_action_url(model, action='list'))
return True return True
except Exception: except Exception:
return False return False
@ -206,7 +206,7 @@ class ObjectCountsWidget(DashboardWidget):
permission = get_permission_for_model(model, 'view') permission = get_permission_for_model(model, 'view')
if request.user.has_perm(permission): if request.user.has_perm(permission):
try: try:
url = reverse(get_viewname(model, 'list')) url = get_action_url(model, action='list')
except NoReverseMatch: except NoReverseMatch:
url = None url = None
qs = model.objects.restrict(request.user, 'view') qs = model.objects.restrict(request.user, 'view')
@ -275,15 +275,13 @@ class ObjectListWidget(DashboardWidget):
logger.debug(f"Dashboard Widget model_class not found: {app_label}:{model_name}") logger.debug(f"Dashboard Widget model_class not found: {app_label}:{model_name}")
return return
viewname = get_viewname(model, action='list')
# Evaluate user's permission. Note that this controls only whether the HTMX element is # Evaluate user's permission. Note that this controls only whether the HTMX element is
# embedded on the page: The view itself will also evaluate permissions separately. # embedded on the page: The view itself will also evaluate permissions separately.
permission = get_permission_for_model(model, 'view') permission = get_permission_for_model(model, 'view')
has_permission = request.user.has_perm(permission) has_permission = request.user.has_perm(permission)
try: try:
htmx_url = reverse(viewname) htmx_url = get_action_url(model, action='list')
except NoReverseMatch: except NoReverseMatch:
htmx_url = None htmx_url = None
parameters = self.config.get('url_params') or {} parameters = self.config.get('url_params') or {}
@ -297,7 +295,7 @@ class ObjectListWidget(DashboardWidget):
except ValueError: except ValueError:
pass pass
return render_to_string(self.template_name, { return render_to_string(self.template_name, {
'viewname': viewname, 'model_name': model_name,
'has_permission': has_permission, 'has_permission': has_permission,
'htmx_url': htmx_url, 'htmx_url': htmx_url,
}) })

View File

@ -7,6 +7,6 @@
</div> </div>
{% else %} {% else %}
<div class="text-danger text-center"> <div class="text-danger text-center">
<i class="mdi mdi-alert"></i> {% trans "Unable to load content. Invalid view name" %}: <span class="font-monospace">{{ viewname }}</span> <i class="mdi mdi-alert"></i> {% trans "Unable to load content. Invalid list viewname for:" %} <span class="font-monospace">{{ model_name }}</span>
</div> </div>
{% endif %} {% endif %}