Why Django Rest Framework - Serializer validation doesn't work

722 views Asked by At

I have a simple serializer in my serializers.py. When I want to send wrong data in the serializer and checking serializer.is_valied() it returns true. Why it returns true?

My Models.py:

class UserRole(models.Model):
    role = models.CharField(max_length = 100, blank=True, null=True)
    permission_read = models.BooleanField(null=True)
    permission_edit = models.BooleanField(null=True)
    permission_write = models.BooleanField(null=True)
    permission_delete = models.BooleanField(null=True)
    superuser = models.BooleanField(null=True)


    def __str__(self):
        return self.role

My serializers.py:

class CreateRoleSerializers(serializers.ModelSerializer):
    class Meta:
        model = UserRole
        exclude = ['superuser']

My views.py:

@api_view(['POST'])
@permission_classes([IsAuthenticated])
@write_required
def user_role_api(request):
    if request.method == 'POST':
        json = JSONRenderer().render(request.data)
        stream = io.BytesIO(json)
        data = JSONParser().parse(stream)
        serializer = CreateRoleSerializers(data=data)
        if serializer.is_valid():
            serializer.save(superuser=0)
            return Response(status=rest_framework.status.HTTP_200_OK)
        return Response(serializer.errors, status=rest_framework.status.HTTP_400_BAD_REQUEST)

When I do input wrong data it an entry in if block. I don't know what's wrong with this code. Thanks in advance for the help!

1

There are 1 answers

2
Mahmoud Adel On

Pass request.data directly to the serializer, you don't have to parse or do more steps

For ex:

serializer = CreateRoleSerializers(data=request.data)

Tip: remove null=True from BooleanField's and add default=False