diff --git a/sapl/crispy_layout_mixin.py b/sapl/crispy_layout_mixin.py
index b131623b9..57bc0d538 100644
--- a/sapl/crispy_layout_mixin.py
+++ b/sapl/crispy_layout_mixin.py
@@ -284,7 +284,7 @@ class CrispyLayoutFormMixin:
'text': field_display,
}
- def fk_urlize_for_detail(self, obj, fieldname):
+ def fk_urlify_for_detail(self, obj, fieldname):
field = obj._meta.get_field(fieldname)
value = getattr(obj, fieldname)
@@ -298,6 +298,14 @@ class CrispyLayoutFormMixin:
return field.verbose_name, display
+ def fk_urlify_for_list(self, obj, field):
+ value = getattr(obj, field)
+ return reverse(
+ '%s:%s_detail' % (
+ value._meta.app_config.name,
+ value._meta.model_name),
+ kwargs={'pk': value.id}),
+
def m2m_urlize_for_detail(self, obj, fieldname):
manager, fieldname = tuple(fieldname.split('__'))
diff --git a/sapl/crud/base.py b/sapl/crud/base.py
index 5d6d8a3c1..94637d9d7 100644
--- a/sapl/crud/base.py
+++ b/sapl/crud/base.py
@@ -413,7 +413,7 @@ class CrudListView(PermissionRequiredContainerCrudMixin, ListView):
'composicao__periodo__data_inicio', 'composicao__periodo__data_fim')]
"""
r = []
- for fieldname in self.list_field_names:
+ for (fieldname, _) in self._parse_field_names(self.list_field_names):
if not isinstance(fieldname, tuple):
fieldname = fieldname,
s = []
@@ -446,14 +446,26 @@ class CrudListView(PermissionRequiredContainerCrudMixin, ListView):
r.append(s)
return r
+ def _parse_field_names(self, field_name_list):
+ parsed_list = []
+ for field_name in field_name_list:
+ field_tuple = tuple(field_name.split('|')) \
+ if '|' in field_name else (field_name, None)
+ parsed_list.append(field_tuple)
+ return parsed_list
+
def _as_row(self, obj):
r = []
- for i, name in enumerate(self.list_field_names):
+ for i, (name, func) in enumerate(self._parse_field_names(self.list_field_names)):
+ # URL padrão para primeira coluna da listagem
url = self.resolve_url(
ACTION_DETAIL, args=(obj.id,)) if i == 0 else None
+ # gera URL para matéria a partir de fk_urlify_for_list em layouts.yaml
+ if i > 0 and func is not None:
+ url = getattr(self, func)(obj, name)[0]
"""Caso o crud list seja para uma relação ManyToManyField"""
- if url and hasattr(self, 'crud') and\
+ if url and hasattr(self, 'crud') and \
hasattr(self.crud, 'is_m2m') and self.crud.is_m2m:
url = url + ('?pkk=' + self.kwargs['pk']
if 'pk' in self.kwargs else '')
@@ -483,7 +495,7 @@ class CrudListView(PermissionRequiredContainerCrudMixin, ListView):
if m:
ss = get_field_display(m, n[-1])[1]
ss = (
- ('
' if '
Ocorrências da Sessão: {{ object.ocorrenciasessao.conteudo|striptags|safe }} -
{% endif %} diff --git a/sapl/templates/sessao/layouts.yaml b/sapl/templates/sessao/layouts.yaml index 0fc779f08..95d542df5 100644 --- a/sapl/templates/sessao/layouts.yaml +++ b/sapl/templates/sessao/layouts.yaml @@ -133,5 +133,5 @@ Correspondencia: CorrespondenciaDetail: {% trans 'Correspondencia' %}: - numero_ordem:2 tipo:3 sessao_plenaria - - documento|fk_urlize_for_detail + - documento|fk_urlify_for_detail - observacao \ No newline at end of file