【问题标题】:Why Django Rest Framework - Serializer validation doesn't work为什么 Django Rest Framework - 序列化程序验证不起作用
【发布时间】:2021-03-09 20:45:58
【问题描述】:

我的 serializers.py 中有一个简单的序列化程序。当我想在序列化程序中发送错误数据并检查 serializer.is_valied() 它返回 true。为什么返回 true?

我的 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

我的 serializers.py:

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

我的意见.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)

当我输入错误数据时,它会在 if 块中输入。我不知道这段代码有什么问题。提前感谢您的帮助!

【问题讨论】:

  • 您能更具体地说明什么不起作用吗?如果序列化器和你共享的完全一样,你需要添加验证方法。
  • 当我输入错误数据时,它会在 if 块中输入

标签: django api django-rest-framework python-requests django-2.2


【解决方案1】:

request.data直接传递给序列化器,你不必解析或做更多步骤

例如:

serializer = CreateRoleSerializers(data=request.data)

提示:从BooleanField 中删除null=True 并添加default=False

【讨论】:

  • 我已经这样做了,但它不起作用并显示同样的问题!
  • 您能用您传递的请求数据示例更新问题吗?
猜你喜欢
  • 2023-03-18
  • 2018-07-06
  • 1970-01-01
  • 2015-02-27
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2020-08-04
  • 2020-05-23
相关资源
最近更新 更多