فهرست منبع

#1344: Add missing object field to ContactAssignmentSerializer

jeremystretch 4 سال پیش
والد
کامیت
8bb9f4b8a2
3فایلهای تغییر یافته به همراه12 افزوده شده و 3 حذف شده
  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 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

+ 1 - 1
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

+ 1 - 1
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']