CustomFieldValue & CustomField

This commit is contained in:
Mattijs Vanhaverbeke
2020-05-16 20:00:25 +02:00
parent 44e82c0286
commit ffd91e2cf5
+25 -15
View File
@@ -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