python - django/休息 : Can I have serializer with only one field?

标签 python django django-rest-framework

我正在使用 django 1.11.5 和 python 3.5。

使用 rest-framework,我想搜索具有 uid 的患者。

当我尝试使用只有一个字段的序列化程序时,我收到错误消息 Thefieldsoption must be a list or tuple or "__all__"。得到了 str..

有什么解决方案可以只用一个字段来搜索用户吗?

序列化器.py

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

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

View .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)

模型.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 = ('id', )

如果不添加逗号 , python 会将 ('id') 视为字符串。这就是您在错误消息中看到 Got str. 的原因。

你可以测试一下:

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

对比

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

关于python - django/休息 : Can I have serializer with only one field?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46873978/

相关文章:

django - 如何避免 Django Forms 和 Django Rest Framework Serializers 中的代码重复?

javascript - 使用 JavaScript Papa Parse 将 CSV 文件加载到静态 Python Bokeh Web 应用程序中

java - 如何在用户计算机上启动本地端口(编辑问题)

python - Django:WSGIRequest'对象在某些页面上没有属性 'user'?

python - 更改 Django 应用程序名称时迁移历史不一致

python - 为 get 和 post 请求定义不同的模式 - AutoSchema Django Rest Framework

python - 如何在 Anaconda 2.0 中使用 Python 3.4 激活 Ipython Notebook 和 QT 控制台

Python:迭代一个集合,这样我们就不会多次比较相同的对象?

django-compressor:在 Debug模式下使用lessc

django - 为什么用户模型具有字符串类型?