nested_serializers.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import warnings
  2. from rest_framework import serializers
  3. from extras import models
  4. from netbox.api.serializers import NestedTagSerializer, WritableNestedSerializer
  5. __all__ = [
  6. 'NestedBookmarkSerializer',
  7. 'NestedConfigContextSerializer',
  8. 'NestedConfigTemplateSerializer',
  9. 'NestedCustomFieldChoiceSetSerializer',
  10. 'NestedCustomFieldSerializer',
  11. 'NestedCustomLinkSerializer',
  12. 'NestedEventRuleSerializer',
  13. 'NestedExportTemplateSerializer',
  14. 'NestedImageAttachmentSerializer',
  15. 'NestedJournalEntrySerializer',
  16. 'NestedSavedFilterSerializer',
  17. 'NestedScriptSerializer',
  18. 'NestedTagSerializer', # Defined in netbox.api.serializers
  19. 'NestedWebhookSerializer',
  20. ]
  21. # TODO: Remove in v4.2
  22. warnings.warn(
  23. "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.",
  24. DeprecationWarning
  25. )
  26. class NestedEventRuleSerializer(WritableNestedSerializer):
  27. class Meta:
  28. model = models.EventRule
  29. fields = ['id', 'url', 'display_url', 'display', 'name']
  30. class NestedWebhookSerializer(WritableNestedSerializer):
  31. class Meta:
  32. model = models.Webhook
  33. fields = ['id', 'url', 'display_url', 'display', 'name']
  34. class NestedCustomFieldSerializer(WritableNestedSerializer):
  35. class Meta:
  36. model = models.CustomField
  37. fields = ['id', 'url', 'display_url', 'display', 'name']
  38. class NestedCustomFieldChoiceSetSerializer(WritableNestedSerializer):
  39. class Meta:
  40. model = models.CustomFieldChoiceSet
  41. fields = ['id', 'url', 'display_url', 'display', 'name', 'choices_count']
  42. class NestedCustomLinkSerializer(WritableNestedSerializer):
  43. class Meta:
  44. model = models.CustomLink
  45. fields = ['id', 'url', 'display_url', 'display', 'name']
  46. class NestedConfigContextSerializer(WritableNestedSerializer):
  47. class Meta:
  48. model = models.ConfigContext
  49. fields = ['id', 'url', 'display_url', 'display', 'name']
  50. class NestedConfigTemplateSerializer(WritableNestedSerializer):
  51. class Meta:
  52. model = models.ConfigTemplate
  53. fields = ['id', 'url', 'display_url', 'display', 'name']
  54. class NestedExportTemplateSerializer(WritableNestedSerializer):
  55. class Meta:
  56. model = models.ExportTemplate
  57. fields = ['id', 'url', 'display_url', 'display', 'name']
  58. class NestedSavedFilterSerializer(WritableNestedSerializer):
  59. class Meta:
  60. model = models.SavedFilter
  61. fields = ['id', 'url', 'display_url', 'display', 'name', 'slug']
  62. class NestedBookmarkSerializer(WritableNestedSerializer):
  63. class Meta:
  64. model = models.Bookmark
  65. fields = ['id', 'url', 'display', 'object_id', 'object_type']
  66. class NestedImageAttachmentSerializer(WritableNestedSerializer):
  67. class Meta:
  68. model = models.ImageAttachment
  69. fields = ['id', 'url', 'display', 'name', 'image']
  70. class NestedJournalEntrySerializer(WritableNestedSerializer):
  71. class Meta:
  72. model = models.JournalEntry
  73. fields = ['id', 'url', 'display_url', 'display', 'created']
  74. class NestedScriptSerializer(WritableNestedSerializer):
  75. url = serializers.HyperlinkedIdentityField(
  76. view_name='extras-api:script-detail',
  77. lookup_field='full_name',
  78. lookup_url_kwarg='pk'
  79. )
  80. display_url = serializers.HyperlinkedIdentityField(
  81. view_name='extras:script',
  82. lookup_field='full_name',
  83. lookup_url_kwarg='pk'
  84. )
  85. name = serializers.CharField(read_only=True)
  86. display = serializers.SerializerMethodField(read_only=True)
  87. class Meta:
  88. model = models.Script
  89. fields = ['id', 'url', 'display_url', 'display', 'name']
  90. def get_display(self, obj):
  91. return f'{obj.name} ({obj.module})'