Se agregaron los microservicios_v2
This commit is contained in:
@@ -46,6 +46,60 @@ class PartidaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Partida
|
||||
fields = '__all__'
|
||||
read_only_fields = ('created_at', 'updated_at', 'numero_partida')
|
||||
|
||||
def validate_unique(self, attrs):
|
||||
"""
|
||||
Sobrescribe la validación de unicidad para manejar correctamente
|
||||
las actualizaciones de registros existentes.
|
||||
"""
|
||||
# Si estamos actualizando un registro existente, excluirlo de la validación
|
||||
if self.instance:
|
||||
# Para actualizaciones, crear una instancia temporal con los nuevos datos
|
||||
# pero sin guardarla, solo para validar unicidad excluyendo el registro actual
|
||||
exclude = {'id': self.instance.id}
|
||||
else:
|
||||
# Para creaciones nuevas, no excluir nada
|
||||
exclude = {}
|
||||
|
||||
# Crear una instancia temporal con los datos combinados
|
||||
if self.instance:
|
||||
# Combinar datos existentes con los nuevos
|
||||
combined_attrs = {}
|
||||
for field in self.Meta.model._meta.fields:
|
||||
field_name = field.name
|
||||
if field_name in attrs:
|
||||
combined_attrs[field_name] = attrs[field_name]
|
||||
elif hasattr(self.instance, field_name):
|
||||
combined_attrs[field_name] = getattr(self.instance, field_name)
|
||||
else:
|
||||
combined_attrs = attrs
|
||||
|
||||
# Verificar unique_together manualmente para pedimento + numero_partida
|
||||
if 'pedimento' in combined_attrs and 'numero_partida' in combined_attrs:
|
||||
queryset = self.Meta.model.objects.filter(
|
||||
pedimento=combined_attrs['pedimento'],
|
||||
numero_partida=combined_attrs['numero_partida']
|
||||
)
|
||||
|
||||
# Si estamos actualizando, excluir el registro actual
|
||||
if self.instance:
|
||||
queryset = queryset.exclude(id=self.instance.id)
|
||||
|
||||
if queryset.exists():
|
||||
raise serializers.ValidationError({
|
||||
'non_field_errors': [
|
||||
f'Ya existe una partida con el número {combined_attrs["numero_partida"]} para este pedimento.'
|
||||
]
|
||||
})
|
||||
|
||||
def validate(self, data):
|
||||
"""
|
||||
Validación adicional personalizada.
|
||||
"""
|
||||
# Llamar a la validación de unicidad personalizada
|
||||
self.validate_unique(data)
|
||||
return data
|
||||
|
||||
class TipoOperacionSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
|
||||
Reference in New Issue
Block a user