Browse Source

#1344: Add missing object field to ContactAssignmentSerializer

jeremystretch 4 years ago
parent
commit
8bb9f4b8a2
3 changed files with 12 additions and 3 deletions
  1. 10 1
      netbox/tenancy/api/serializers.py
  2. 1 1
      netbox/tenancy/api/views.py
  3. 1 1
      netbox/tenancy/filtersets.py

+ 10 - 1
netbox/tenancy/api/serializers.py

@@ -1,10 +1,12 @@
 from django.contrib.auth.models import ContentType
 from django.contrib.auth.models import ContentType
+from drf_yasg.utils import swagger_serializer_method
 from rest_framework import serializers
 from rest_framework import serializers
 
 
 from netbox.api import ChoiceField, ContentTypeField
 from netbox.api import ChoiceField, ContentTypeField
 from netbox.api.serializers import NestedGroupModelSerializer, PrimaryModelSerializer
 from netbox.api.serializers import NestedGroupModelSerializer, PrimaryModelSerializer
 from tenancy.choices import ContactPriorityChoices
 from tenancy.choices import ContactPriorityChoices
 from tenancy.models import *
 from tenancy.models import *
+from utilities.api import get_serializer_for_model
 from .nested_serializers import *
 from .nested_serializers import *
 
 
 
 
@@ -92,6 +94,7 @@ class ContactAssignmentSerializer(PrimaryModelSerializer):
     content_type = ContentTypeField(
     content_type = ContentTypeField(
         queryset=ContentType.objects.all()
         queryset=ContentType.objects.all()
     )
     )
+    object = serializers.SerializerMethodField(read_only=True)
     contact = NestedContactSerializer()
     contact = NestedContactSerializer()
     role = NestedContactRoleSerializer(required=False, allow_null=True)
     role = NestedContactRoleSerializer(required=False, allow_null=True)
     priority = ChoiceField(choices=ContactPriorityChoices, required=False)
     priority = ChoiceField(choices=ContactPriorityChoices, required=False)
@@ -99,6 +102,12 @@ class ContactAssignmentSerializer(PrimaryModelSerializer):
     class Meta:
     class Meta:
         model = ContactAssignment
         model = ContactAssignment
         fields = [
         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',
             '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

+ 1 - 1
netbox/tenancy/api/views.py

@@ -82,6 +82,6 @@ class ContactViewSet(CustomFieldModelViewSet):
 
 
 
 
 class ContactAssignmentViewSet(CustomFieldModelViewSet):
 class ContactAssignmentViewSet(CustomFieldModelViewSet):
-    queryset = ContactAssignment.objects.prefetch_related('contact', 'role')
+    queryset = ContactAssignment.objects.prefetch_related('object', 'contact', 'role')
     serializer_class = serializers.ContactAssignmentSerializer
     serializer_class = serializers.ContactAssignmentSerializer
     filterset_class = filtersets.ContactAssignmentFilterSet
     filterset_class = filtersets.ContactAssignmentFilterSet

+ 1 - 1
netbox/tenancy/filtersets.py

@@ -190,4 +190,4 @@ class ContactAssignmentFilterSet(ChangeLoggedModelFilterSet):
 
 
     class Meta:
     class Meta:
         model = ContactAssignment
         model = ContactAssignment
-        fields = ['id', 'content_type_id', 'priority']
+        fields = ['id', 'content_type_id', 'object_id', 'priority']