added functionality to Serializer validate method

This commit is contained in:
fjrodriguez
2023-01-25 09:09:13 -06:00
parent 2e432ae674
commit 2f44b7d929
13 changed files with 367 additions and 20 deletions

40
Sistemas/serializers.py Normal file
View File

@@ -0,0 +1,40 @@
from rest_framework import serializers
from .models import Device, Sistema, sistemas_por_cliente
from Clientes.models import Clientes
class SistemaPrimaryKeyRelatedField(serializers.PrimaryKeyRelatedField):
def to_internal_value(self,data):
try:
print(Sistema.objects.get(nombre_sistema=data))
return Sistema.objects.get(nombre_sistema=data)
except Sistema.DoesNotExist:
raise serializers.ValidationError("Sistema no existe")
class ClientPrimaryKeyRelatedField(serializers.PrimaryKeyRelatedField):
def to_internal_value(self,data):
try:
return Clientes.objects.get(RFC=data)
except Clientes.DoesNotExist:
raise serializers.ValidationError("No existe Cliente")
class DeviceSerializer(serializers.ModelSerializer):
client = ClientPrimaryKeyRelatedField(queryset=Clientes.objects.all())
sistema = SistemaPrimaryKeyRelatedField(queryset=Sistema.objects.all())
token = serializers.CharField(read_only=True)
class Meta:
model =Device
fields = ('client','sistema','device_name','device_os', 'ip_address','token')
def validate(self, data):
sistema = data.get('sistema', None)
client = data.get('client', None)
try:
sistemaxCli = sistemas_por_cliente.objects.get(id_sistema=sistema,cliente=client)
print('validate spc', sistemaxCli)
except sistemas_por_cliente.DoesNotExist:
raise serializers.ValidationError('No existe licencia para este sistmea y/o cliente')
if sistemaxCli.num_licencias <= Device.objects.filter(sistema=sistemaxCli.id_sistema).count():
raise serializers.ValidationError(f"No hay licencias disponibles para este sistema:{sistema} y cliente:{client}")
return data