bookmarks.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435
  1. from drf_spectacular.utils import extend_schema_field
  2. from rest_framework import serializers
  3. from core.models import ObjectType
  4. from extras.models import Bookmark
  5. from netbox.api.fields import ContentTypeField
  6. from netbox.api.serializers import ValidatedModelSerializer
  7. from users.api.serializers_.users import UserSerializer
  8. from utilities.api import get_serializer_for_model
  9. __all__ = (
  10. 'BookmarkSerializer',
  11. )
  12. class BookmarkSerializer(ValidatedModelSerializer):
  13. url = serializers.HyperlinkedIdentityField(view_name='extras-api:bookmark-detail')
  14. object_type = ContentTypeField(
  15. queryset=ObjectType.objects.with_feature('bookmarks'),
  16. )
  17. object = serializers.SerializerMethodField(read_only=True)
  18. user = UserSerializer(nested=True)
  19. class Meta:
  20. model = Bookmark
  21. fields = [
  22. 'id', 'url', 'display', 'object_type', 'object_id', 'object', 'user', 'created',
  23. ]
  24. brief_fields = ('id', 'url', 'display', 'object_id', 'object_type')
  25. @extend_schema_field(serializers.JSONField(allow_null=True))
  26. def get_object(self, instance):
  27. serializer = get_serializer_for_model(instance.object)
  28. context = {'request': self.context['request']}
  29. return serializer(instance.object, nested=True, context=context).data