feat(access): Enable specifying the kb model to use for linking kb article to a model

ref: #707
This commit is contained in:
2025-04-03 18:11:03 +09:30
parent 3417e37317
commit 03a9582703
4 changed files with 30 additions and 8 deletions

View File

@ -65,6 +65,8 @@ class Entity(
# app_namespace = 'access'
kb_model_name = 'entity'
note_basename = '_api_v2_entity_note'
documentation = ''

View File

@ -172,6 +172,13 @@ class TenancyObject(SaveHistory):
the API version, i.e. `v2:devops`.
"""
kb_model_name: str = None
"""Model name to use for KB article linking
This value is derived from `<model>._meta.model_name`. This value should
only be used when there is model inheritence.
"""
note_basename: str = None
"""URL BaseName for the notes endpoint.

View File

@ -41,6 +41,12 @@ class TenancyObjectTestCases:
assert issubclass(TenancyObject, SaveHistory)
def test_has_attribute_kb_model_name(self):
"""Attribute _kb_model_name exists """
assert hasattr(self.item, 'kb_model_name')
def test_has_attribute_organization(self):
""" Field organization exists """

View File

@ -60,16 +60,23 @@ class CommonModelSerializer(CommonBaseSerializer):
get_url = {
'_self': item.get_url( request = self._context['view'].request ),
'knowledge_base': reverse(
"v2:_api_v2_model_kb-list",
request=self._context['view'].request,
kwargs={
'model': self.Meta.model._meta.model_name,
'model_pk': item.pk
}
),
}
kb_model_name = self.Meta.model._meta.model_name
if getattr(item, 'kb_model_name'):
kb_model_name = item.kb_model_name
get_url['knowledge_base'] = reverse(
'v2:_api_v2_model_kb-list',
request=self._context['view'].request,
kwargs={
'model': kb_model_name,
'model_pk': item.pk
}
)
if getattr(self.Meta.model, 'save_model_history', True):
get_url['history'] = reverse(