diff --git a/netbox/tenancy/api/serializers.py b/netbox/tenancy/api/serializers.py index 90c13725c..b97c3dac4 100644 --- a/netbox/tenancy/api/serializers.py +++ b/netbox/tenancy/api/serializers.py @@ -1,10 +1,12 @@ from django.contrib.auth.models import ContentType +from drf_yasg.utils import swagger_serializer_method from rest_framework import serializers from netbox.api import ChoiceField, ContentTypeField from netbox.api.serializers import NestedGroupModelSerializer, PrimaryModelSerializer from tenancy.choices import ContactPriorityChoices from tenancy.models import * +from utilities.api import get_serializer_for_model from .nested_serializers import * @@ -92,6 +94,7 @@ class ContactAssignmentSerializer(PrimaryModelSerializer): content_type = ContentTypeField( queryset=ContentType.objects.all() ) + object = serializers.SerializerMethodField(read_only=True) contact = NestedContactSerializer() role = NestedContactRoleSerializer(required=False, allow_null=True) priority = ChoiceField(choices=ContactPriorityChoices, required=False) @@ -99,6 +102,12 @@ class ContactAssignmentSerializer(PrimaryModelSerializer): class Meta: model = ContactAssignment fields = [ - 'id', 'url', 'display', 'content_type', 'object_id', 'contact', 'role', 'priority', 'created', + 'id', 'url', 'display', 'content_type', 'object_id', 'object', 'contact', 'role', 'priority', 'created', 'last_updated', ] + + @swagger_serializer_method(serializer_or_field=serializers.DictField) + def get_object(self, instance): + serializer = get_serializer_for_model(instance.content_type.model_class(), prefix='Nested') + context = {'request': self.context['request']} + return serializer(instance.object, context=context).data diff --git a/netbox/tenancy/api/views.py b/netbox/tenancy/api/views.py index 8c7c33aba..50b188b5f 100644 --- a/netbox/tenancy/api/views.py +++ b/netbox/tenancy/api/views.py @@ -82,6 +82,6 @@ class ContactViewSet(CustomFieldModelViewSet): class ContactAssignmentViewSet(CustomFieldModelViewSet): - queryset = ContactAssignment.objects.prefetch_related('contact', 'role') + queryset = ContactAssignment.objects.prefetch_related('object', 'contact', 'role') serializer_class = serializers.ContactAssignmentSerializer filterset_class = filtersets.ContactAssignmentFilterSet diff --git a/netbox/tenancy/filtersets.py b/netbox/tenancy/filtersets.py index dd73edace..c8af89143 100644 --- a/netbox/tenancy/filtersets.py +++ b/netbox/tenancy/filtersets.py @@ -190,4 +190,4 @@ class ContactAssignmentFilterSet(ChangeLoggedModelFilterSet): class Meta: model = ContactAssignment - fields = ['id', 'content_type_id', 'priority'] + fields = ['id', 'content_type_id', 'object_id', 'priority']