예제 #1
0
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
예제 #2
0
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
예제 #3
0
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
예제 #4
0
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
예제 #5
0
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
예제 #6
0
 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)
예제 #7
0
 def users(self, request, pk):
     organisation = self.get_object()
     users = organisation.users.all()
     return Response(UserFullSerializer(users, many=True).data)