class ReviewShortSerializer(serializers.ModelSerializer): user_name = UserFullSerializer(read_only=True) reciever_name = UserFullSerializer(read_only=True) class Meta: model = Review fields = ('user_name', 'reciever_name', 'rating') def get_user_name(self, obj): return obj.user.full_name def get_reciever_name(self, obj): return obj.reciever.full_name
class CommentOrderFullSerializer(CommentOrderShortSerializer): order = OrderFullSerializer(read_only=True) user = UserFullSerializer(read_only=True) reciever = UserFullSerializer(read_only=True) class Meta(CommentOrderShortSerializer.Meta): fields = CommentOrderShortSerializer.Meta.fields + ( 'order', 'created_at', 'user', 'reciever') def validate_id(self, value): if not isinstance(value, int) and value < 1: raise serializers.ValidationError( f'Id must me integer and greater or equal to 1') return value
class ReviewFullSerializer(ReviewShortSerializer): user = UserFullSerializer(read_only=True) reciever = UserFullSerializer(read_only=True) class Meta(ReviewShortSerializer.Meta): fields = ReviewShortSerializer.Meta.fields + ('user', 'reciever') def validate_rating(self, value): if not isinstance(value, int) and value < 1 or value > 5: serializers.ValidationError(f'Rating scale is from 1 to 5') return value def validate_id(self, value): if not isinstance(value, int) and value < 1: raise serializers.ValidationError( f'Id must me integer and greater or equal to 1') return value
class CommentReviewFullSerializer(CommentReviewShortSerializer): review = ReviewFullSerializer(read_only=True) user = UserFullSerializer(read_only=True) reciever = UserFullSerializer(read_only=True) class Meta(CommentReviewShortSerializer.Meta): fields = CommentReviewShortSerializer.Meta.fields + ( 'review', 'user', 'reciever', 'created_at') def create(self, validated_data): review_data = validated_data.get('review') Review.objects.create(**review_data) CommentReview.objects.create(**validated_data) def validate_id(self, value): if not isinstance(value, int) and value < 1: raise serializers.ValidationError( f'Id must me integer and greater or equal to 1') return value
class OrderFullSerializer(OrderShortSerializer): customer = UserFullSerializer(read_only=True) executor = UserFullSerializer(read_only=True) order_type_name = serializers.SerializerMethodField(read_only=True) payment_type_name = serializers.SerializerMethodField(read_only=True) class Meta(OrderShortSerializer.Meta): fields = OrderShortSerializer.Meta.fields + ( 'customer', 'executor', 'description', 'created_at', 'payment_type', 'payment_type_name', 'order_type', 'order_type_name') def get_payment_type_name(self, obj): types_dict = dict(PAYMENT_TYPES) if types_dict[obj.payment_type]: return types_dict[obj.payment_type] return '' def get_order_type_name(self, obj): types_dict = dict(ORDER_TYPES) if obj.order_type and types_dict[obj.order_type]: return types_dict[obj.order_type] return '' def validate_payment_type(self, value): if value < 1 or value > len(PAYMENT_TYPES) or not isinstance( value, int): raise serializers.ValidationError( f'Payment type options: {PAYMENT_TYPES}') return value def validate_order_type(self, value): if value < 1 or value > len(ORDER_TYPES) or not isinstance(value, int): raise serializers.ValidationError( f'Order type options: {ORDER_TYPES}') return value def validate_id(self, value): if not isinstance(value, int) and value < 1: raise serializers.ValidationError( f'Id must me integer and greater or equal to 1') return value
def register(self, request, pk=None): serializer = UserFullSerializer(data=request.data) if serializer.is_valid(): user = serializer.save() activation = Activation.objects.create(user=user) params = { 'id': user.activation.id, } r = Request('GET', f'{request.build_absolute_uri("/")}users/activate/', params=params) \ .prepare() send_mail( subject='Account verification', message = 'To activate your account click link below\n' + r.url, from_email = constants.GMAIL_EMAIL, recipient_list = [serializer.data.get('email'), ], fail_silently = False, ) logger.info(f'User with email {serializer.data.get("email")} registered') return Response(serializer.data) logger.error(f'Registration with email {serializer.data.get("email")} failed \n' f'{serializer.errors}') return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def users(self, request, pk): organisation = self.get_object() users = organisation.users.all() return Response(UserFullSerializer(users, many=True).data)