【问题标题】:There is no effect of required=False to Serializer in Serializer对 Serializer 中的 Serializer 没有 required=False 的影响
【发布时间】:2018-12-13 14:13:25
【问题描述】:

序列化器:

class AvatarBaseSerializer(Serializer):
    uuid = ReadOnlyField()
    user = UserBaseSerializer(read_only=True)
    name = CharField(allow_blank=True)
    GENDER = (("M", "Man"), ("W", "Woman"))
    gender = ChoiceField(choices=GENDER)
    body = BodySerializer(partial=True, required=False)
    head = HeadBaseSerializer(read_only=True)
    head_pk = IntegerField(write_only=True)
    head_adjust = HeadAdjustBaseSerializer(partial=True, required=False)
    hair = HairBaseSerializer(read_only=True)
    hair_pk = UUIDField(write_only=True)
    hair_adjust = HairAdjustBaseSerializer(partial=True, required=False)
    thumbnail = ImageField(required=False, allow_null=True) 

视图集:

class AvatarViewSet(viewsets.ModelViewSet):
    queryset = Avatar.objects.all()
    serializer_class = AvatarBaseSerializer
    permission_classes = (permissions.UserIsRequestUserPermission,)

    ...

    def partial_update(self, request, *args, **kwargs):
        self.check_thumbnail_file_size(request)
        return super().partial_update(request, *args, **kwargs)

我通过 PATCH 方法发送以下参数。但是 Django rest 框架返回 400 Bad Request("Invalid Input")。

{
  "head_pk": 1,
  "hair_pk": "89d4c318-c9bf-42cd-b4c4-b7e70a2c8f40",
  "name": "gewgew",
  "gender": "W"
}

我想发送没有body、head_adjust、hair_adjust的参数。

【问题讨论】:

  • 发布错误详情。它一定指出了有错误的字段

标签: django django-rest-framework


【解决方案1】:

当对 ModelSerializer 应用验证时,序列化器字段及其对应的模型字段都必须正确验证。如果您的模型上有可选字段,请确保在模型字段上正确设置blank=True,并在序列化字段上设置required=False

you can see it in Docs

【讨论】:

  • 我在 Avatar.body、Avatar.head_adjust、Avatar.hair_adjust 处设置了 blank=True,但它会引发同样的错误 ;(
猜你喜欢
  • 2020-02-11
  • 2023-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多