mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
from drf_spectacular.utils import extend_schema_field
|
|
from rest_framework import serializers
|
|
|
|
from extras.choices import *
|
|
from extras.models import ObjectChange
|
|
from netbox.api.exceptions import SerializerNotFound
|
|
from netbox.api.fields import ChoiceField, ContentTypeField
|
|
from netbox.api.serializers import BaseModelSerializer
|
|
from users.api.serializers_.users import UserSerializer
|
|
from utilities.api import get_serializer_for_model
|
|
|
|
__all__ = (
|
|
'ObjectChangeSerializer',
|
|
)
|
|
|
|
|
|
class ObjectChangeSerializer(BaseModelSerializer):
|
|
url = serializers.HyperlinkedIdentityField(view_name='extras-api:objectchange-detail')
|
|
user = UserSerializer(
|
|
nested=True,
|
|
read_only=True
|
|
)
|
|
action = ChoiceField(
|
|
choices=ObjectChangeActionChoices,
|
|
read_only=True
|
|
)
|
|
changed_object_type = ContentTypeField(
|
|
read_only=True
|
|
)
|
|
changed_object = serializers.SerializerMethodField(
|
|
read_only=True
|
|
)
|
|
|
|
class Meta:
|
|
model = ObjectChange
|
|
fields = [
|
|
'id', 'url', 'display', 'time', 'user', 'user_name', 'request_id', 'action', 'changed_object_type',
|
|
'changed_object_id', 'changed_object', 'prechange_data', 'postchange_data',
|
|
]
|
|
|
|
@extend_schema_field(serializers.JSONField(allow_null=True))
|
|
def get_changed_object(self, obj):
|
|
"""
|
|
Serialize a nested representation of the changed object.
|
|
"""
|
|
if obj.changed_object is None:
|
|
return None
|
|
|
|
try:
|
|
serializer = get_serializer_for_model(obj.changed_object)
|
|
except SerializerNotFound:
|
|
return obj.object_repr
|
|
data = serializer(obj.changed_object, nested=True, context={'request': self.context['request']}).data
|
|
|
|
return data
|