CustomFieldValue & CustomField
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
from rest_framework.viewsets import ModelViewSet, ViewSet, ReadOnlyModelViewSet, GenericViewSet
|
from rest_framework.viewsets import ModelViewSet, ViewSet, ReadOnlyModelViewSet, GenericViewSet
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
|
||||||
from .serializers import PreDeviceRoleSerializer, TopologyDummySerializer, PreTagSerializer
|
from .serializers import PreDeviceRoleSerializer, TopologyDummySerializer, PreTagSerializer
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@@ -8,7 +9,7 @@ from django.conf import settings
|
|||||||
from utilities.api import IsAuthenticatedOrLoginNotRequired
|
from utilities.api import IsAuthenticatedOrLoginNotRequired
|
||||||
|
|
||||||
from dcim.models import DeviceRole, Device, Cable
|
from dcim.models import DeviceRole, Device, Cable
|
||||||
from extras.models import Tag
|
from extras.models import Tag, CustomField, CustomFieldValue
|
||||||
|
|
||||||
ignore_cable_type_raw = settings.PLUGINS_CONFIG["netbox_topology_views"]["ignore_cable_type"]
|
ignore_cable_type_raw = settings.PLUGINS_CONFIG["netbox_topology_views"]["ignore_cable_type"]
|
||||||
ignore_cable_type = ignore_cable_type_raw.split(",")
|
ignore_cable_type = ignore_cable_type_raw.split(",")
|
||||||
@@ -34,7 +35,16 @@ class SaveCoordsViewSet(GenericViewSet):
|
|||||||
|
|
||||||
@action(detail=False, methods=['post'])
|
@action(detail=False, methods=['post'])
|
||||||
def save_coords(self, request):
|
def save_coords(self, request):
|
||||||
|
results = {}
|
||||||
if settings.PLUGINS_CONFIG["netbox_topology_views"]["allow_coordinates_saving"]:
|
if settings.PLUGINS_CONFIG["netbox_topology_views"]["allow_coordinates_saving"]:
|
||||||
|
try:
|
||||||
|
cfCoords = CustomField.objects.get(name='coordinates')
|
||||||
|
except CustomField.DoesNotExist:
|
||||||
|
results["status"] = "coords custom field not created"
|
||||||
|
return Response(status=500)
|
||||||
|
|
||||||
|
obj_type = ContentType.objects.get_for_model(Device)
|
||||||
|
|
||||||
device_id = None
|
device_id = None
|
||||||
x_coord = None
|
x_coord = None
|
||||||
y_coord = None
|
y_coord = None
|
||||||
@@ -49,21 +59,21 @@ class SaveCoordsViewSet(GenericViewSet):
|
|||||||
y_coord = request.data["y"]
|
y_coord = request.data["y"]
|
||||||
|
|
||||||
actual_device= Device.objects.get(id=device_id)
|
actual_device= Device.objects.get(id=device_id)
|
||||||
for device_custom_field in actual_device.custom_field_values.all():
|
try:
|
||||||
if device_custom_field.field.name == "coordinates":
|
cfvCoords = CustomFieldValue.objects.get(obj_type=obj_type, obj_id=actual_device.pk, field__name='coordinates')
|
||||||
old_cords = device_custom_field.serialized_value.split(";")
|
cfvCoords.value = "%s;%s" % (x_coord,y_coord)
|
||||||
device_custom_field.value = "%s;%s" % (x_coord,y_coord)
|
cfvCoords.save()
|
||||||
device_custom_field.save()
|
results["status"] = "coords set"
|
||||||
actual_device.save()
|
except CustomFieldValue.DoesNotExist:
|
||||||
results = {}
|
cfvCoords = CustomFieldValue(field=cfCoords, obj_type=obj_type, obj_id=actual_device.id)
|
||||||
results["status"] = "ok"
|
cfvCoords.value = "%s;%s" % (x_coord,y_coord)
|
||||||
return Response(results)
|
cfvCoords.save()
|
||||||
|
results["status"] = "coords set for first time"
|
||||||
print('notok')
|
|
||||||
#TODO
|
return Response(results)
|
||||||
return Response(status=500)
|
|
||||||
else:
|
else:
|
||||||
return Response(status=500)
|
results["status"] = "not allowed to save coords"
|
||||||
|
return Response(results, status=500)
|
||||||
|
|
||||||
class SearchViewSet(GenericViewSet):
|
class SearchViewSet(GenericViewSet):
|
||||||
#_ignore_model_permissions = True
|
#_ignore_model_permissions = True
|
||||||
|
|||||||
Reference in New Issue
Block a user