فهرست منبع

Introduce GenericObjectSerializer

jeremystretch 3 سال پیش
والد
کامیت
fb2bfe2337
2فایلهای تغییر یافته به همراه32 افزوده شده و 0 حذف شده
  1. 1 0
      netbox/netbox/api/serializers/__init__.py
  2. 31 0
      netbox/netbox/api/serializers/generic.py

+ 1 - 0
netbox/netbox/api/serializers/__init__.py

@@ -2,6 +2,7 @@ from rest_framework import serializers
 
 
 from .base import *
 from .base import *
 from .features import *
 from .features import *
+from .generic import *
 from .nested import *
 from .nested import *
 
 
 
 

+ 31 - 0
netbox/netbox/api/serializers/generic.py

@@ -0,0 +1,31 @@
+from django.contrib.contenttypes.models import ContentType
+from rest_framework import serializers
+
+from netbox.api import ContentTypeField
+from utilities.utils import content_type_identifier
+
+__all__ = (
+    'GenericObjectSerializer',
+)
+
+
+class GenericObjectSerializer(serializers.Serializer):
+    """
+    Minimal representation of some generic object identified by ContentType and PK.
+    """
+    object_type = ContentTypeField(
+        queryset=ContentType.objects.all()
+    )
+    object_id = serializers.IntegerField()
+
+    def to_internal_value(self, data):
+        data = super().to_internal_value(data)
+        model = data['object_type'].model_class()
+        return model.objects.get(pk=data['object_id'])
+
+    def to_representation(self, instance):
+        ct = ContentType.objects.get_for_model(instance)
+        return {
+            'object_type': content_type_identifier(ct),
+            'object_id': instance.pk,
+        }