providers.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from rest_framework import serializers
  2. from circuits.models import Provider, ProviderAccount, ProviderNetwork
  3. from ipam.api.serializers_.asns import ASNSerializer
  4. from ipam.models import ASN
  5. from netbox.api.fields import RelatedObjectCountField, SerializedPKRelatedField
  6. from netbox.api.serializers import PrimaryModelSerializer
  7. from .nested import NestedProviderAccountSerializer
  8. __all__ = (
  9. 'ProviderAccountSerializer',
  10. 'ProviderNetworkSerializer',
  11. 'ProviderSerializer',
  12. )
  13. class ProviderSerializer(PrimaryModelSerializer):
  14. accounts = SerializedPKRelatedField(
  15. queryset=ProviderAccount.objects.all(),
  16. serializer=NestedProviderAccountSerializer,
  17. required=False,
  18. many=True
  19. )
  20. asns = SerializedPKRelatedField(
  21. queryset=ASN.objects.all(),
  22. serializer=ASNSerializer,
  23. nested=True,
  24. required=False,
  25. many=True
  26. )
  27. # Related object counts
  28. circuit_count = RelatedObjectCountField('circuits')
  29. class Meta:
  30. model = Provider
  31. fields = [
  32. 'id', 'url', 'display_url', 'display', 'name', 'slug', 'accounts', 'description', 'owner', 'comments',
  33. 'asns', 'tags', 'custom_fields', 'created', 'last_updated', 'circuit_count',
  34. ]
  35. brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'circuit_count')
  36. class ProviderAccountSerializer(PrimaryModelSerializer):
  37. provider = ProviderSerializer(nested=True)
  38. name = serializers.CharField(allow_blank=True, max_length=100, required=False, default='')
  39. class Meta:
  40. model = ProviderAccount
  41. fields = [
  42. 'id', 'url', 'display_url', 'display', 'provider', 'name', 'account', 'description', 'owner', 'comments',
  43. 'tags', 'custom_fields', 'created', 'last_updated',
  44. ]
  45. brief_fields = ('id', 'url', 'display', 'name', 'account', 'description')
  46. class ProviderNetworkSerializer(PrimaryModelSerializer):
  47. provider = ProviderSerializer(nested=True)
  48. class Meta:
  49. model = ProviderNetwork
  50. fields = [
  51. 'id', 'url', 'display_url', 'display', 'provider', 'name', 'service_id', 'description', 'owner', 'comments',
  52. 'tags', 'custom_fields', 'created', 'last_updated',
  53. ]
  54. brief_fields = ('id', 'url', 'display', 'name', 'description')