加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – django / rest:我可以只有一个字段的序列化器吗?

发布时间:2020-12-20 12:04:01 所属栏目:Python 来源:网络整理
导读:我正在使用 django 1.11.5和 python 3.5. 使用rest-framework,我想搜索有uid的病人. 当我尝试只有一个字段的序列化程序时,我得到错误Thefieldsoption必须是列表或元组或“__all__”.得了.. 是否有任何解决方案只有一个字段来搜索用户? serializers.py class
我正在使用 django 1.11.5和 python 3.5.

使用rest-framework,我想搜索有uid的病人.

当我尝试只有一个字段的序列化程序时,我得到错误Thefieldsoption必须是列表或元组或“__all__”.得了..

是否有任何解决方案只有一个字段来搜索用户?

serializers.py

class GetUserSerializer(serializers.ModelSerializer):
    id = serializers.CharField(source='uid')

    class Meta:
        model = User
        fields = ('id')

views.py

class GetUser(CreateAPIView):
    permission_classes = ()
    serializer_class = GetUserSerializer

    def get(self,request):
        serializer = GetUserSerializer(data=request.data)
        # Check format and unique constraint
        if not serializer.is_valid():
            return Response(serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)
        data = serializer.data


        if User.objects.filter(uid = data['id']).exists():
            user = User.objects.get(uid = data['id'])
            resp = {"user":{"uid":user.uid,"firstname":user.firstname,"yearofbirth": user.yearofbirth,
                            "lastnames": user.lastname,"othernames": user.othernames}}
            return Response(resp,status=status.HTTP_200_OK)

        else:

            resp = {"error": "User not found"}
            return Response(resp,status=status.HTTP_404_NOT_FOUND)

models.py

class User(models.Model):
    uid = models.CharField(max_length=255,unique=True,default="0")
    firstname = models.CharField(max_length=255)
    lastname = models.CharField(max_length=255,blank=True)
    othernames = models.CharField(max_length=255,blank=True)
    yearofbirth = models.SmallIntegerField(validators=[MinValueValidator(1900),MaxValueValidator(2018)],null = False

解决方法

您需要在fields选项中指定一个元组:

fields = ('id',)

如果你不添加逗号,python将(‘id’)视为一个字符串.这就是你看到Got str的原因.在错误消息中.

你可以测试一下:

>>> type(('id'))
<type 'str'>

VS

>>> type(('id',))
<type 'tuple'>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读