#1344: Add missing object field to ContactAssignmentSerializer

This commit is contained in:
jeremystretch 2021-11-03 16:27:43 -04:00
parent 96cde7d4af
commit 8bb9f4b8a2
3 changed files with 12 additions and 3 deletions

View File

@ -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

View File

@ -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

View File

@ -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']