from rest_framework import serializers from comment.models import Comment, User from establishment.models import Establishment class CommentSerializer(serializers.ModelSerializer): id = serializers.IntegerField() comment = serializers.CharField() mark = serializers.DecimalField(max_digits=4, decimal_places=2) locale = serializers.CharField() account_id = serializers.IntegerField() establishment_id = serializers.CharField() class Meta: model = Comment fields = ( "id", "comment", "mark", "locale", "account_id", "establishment_id" ) def validate(self, data): data = self.set_old_id(data) data = self.set_text(data) data = self.set_mark(data) data = self.set_establishment(data) data = self.set_account(data) return data def set_text(self, data): data['text'] = data.pop('comment') return data def set_mark(self, data): if data['mark'] < 0: data['mark'] = data['mark'] * -1 return data def set_account(self, data): try: data['account'] = User.objects.filter(old_id=data['account_id']).first() except User.DoesNotExist as e: raise ValueError(f"User account not found with {data}: {e}") del(data['account_id']) return data def set_establishment(self, data): try: data['establishment'] = Establishment.objects.filter(old_id=data['account_id']).first() except Establishment.DoesNotExist as e: raise ValueError(f"Establishment not found with {data}: {e}") del(data['establishment_id']) return data def set_old_id(self, data): data['old_id'] = data.pop("id") return data