mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-24 17:38:37 -06:00
Introduce GenericObjectSerializer
This commit is contained in:
parent
43a4a9c86d
commit
fb2bfe2337
@ -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
netbox/netbox/api/serializers/generic.py
Normal file
31
netbox/netbox/api/serializers/generic.py
Normal file
@ -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,
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user