diff --git a/freedcs/api/models.py b/freedcs/api/models.py index 6e22b08..650907f 100644 --- a/freedcs/api/models.py +++ b/freedcs/api/models.py @@ -3,8 +3,16 @@ from django.core.exceptions import ValidationError def device_validation(value): - published_devices = WhiteList.objects.filter(serial=value, - is_published=True) + if value.startswith('ZZ'): # simulated devices + published_devices = WhiteList.objects.filter( + serial='ZZ%', + is_published=True + ) + else: + published_devices = WhiteList.objects.filter( + serial=value, + is_published=True + ) if not published_devices: raise ValidationError("Device is not published") diff --git a/freedcs/api/serializers.py b/freedcs/api/serializers.py index cce3fbe..80d4434 100644 --- a/freedcs/api/serializers.py +++ b/freedcs/api/serializers.py @@ -1,14 +1,21 @@ from rest_framework import serializers -from api.models import Device, WhiteList +from api.models import Device, device_validation class DeviceSerializer(serializers.ModelSerializer): + serial = serializers.CharField( + max_length=128, + validators=[device_validation], + ) # disable unique validation + class Meta: model = Device - fields = ('serial', 'creation_time', 'updated_time',) + fields = '__all__' + read_only_fields = ('creation_time', 'updated_time') - -# class WhiteListSerializer(serializers.ModelSerializer): -# class Meta: -# model = Device -# fields = ('serial', 'creation_time', 'updated_time',) + def create(self, validated_data): + device, created = Device.objects.update_or_create( + serial=validated_data['serial'], + defaults={'serial': validated_data['serial']}, + ) + return device