feat(core): Ticket Comment Get URL functions

ref: #732 #726
This commit is contained in:
2025-04-26 06:28:18 +09:30
parent bdfd3f42c4
commit 98479f39e6

View File

@ -1,6 +1,8 @@
from django.apps import apps
from django.db import models
from rest_framework.reverse import reverse
from access.fields import AutoCreatedField, AutoLastModifiedField
from access.models.entity import Entity
from access.models.tenancy import TenancyObject
@ -271,6 +273,112 @@ class TicketCommentBase(
)
def get_related_model(self):
"""Recursive model Fetch
Returns the lowest model found in a chain of inherited models.
Args:
model (models.Model, optional): Model to fetch the child model from. Defaults to None.
Returns:
models.Model: Lowset model found in inherited model chain
"""
related_model_name = self.get_related_field_name()
related_model = getattr(self, related_model_name, None)
if related_model_name == '':
related_model = None
elif related_model is None:
related_model = self
elif hasattr(related_model, 'get_related_field_name'):
if related_model.get_related_field_name() != '':
related_model = related_model.get_related_model()
return related_model
def get_related_field_name(self) -> str:
meta = getattr(self, '_meta')
for related_object in getattr(meta, 'related_objects', []):
if not issubclass(related_object.related_model, TicketBase):
continue
if getattr(self, related_object.name, None):
if(
not str(related_object.name).endswith('history')
and not str(related_object.name).endswith('notes')
):
return related_object.name
break
return ''
def get_url( self, request = None ) -> str:
kwargs = self.get_url_kwargs()
if self.parent:
url_name = '_api_v2_ticket_comment_base_sub_thread'
else:
url_name = '_api_v2_ticket_comment_base_sub'
if request:
return reverse('v2:' + url_name + '-detail', request=request, kwargs = kwargs )
return reverse('v2:' + url_name + '-detail', kwargs = kwargs )
def get_url_kwargs(self) -> dict:
kwargs = {
'ticket_comment_model': self.comment_type,
'ticket_id': self.ticket.id,
}
if self.pk:
kwargs.update({
'pk': self.id
})
if self.parent:
kwargs.update({
'parent_id': self.parent.id
})
return kwargs
def get_url_kwargs_notes(self):
return FeatureNotUsed