【问题标题】:Django rest api expected string or buffer on PATCHPATCH 上的 Django rest api 预期字符串或缓冲区
【发布时间】:2018-02-01 13:23:15
【问题描述】:

我正在制作一个 Django 应用程序,我在其中通过 REST API 发送请求。我正在使用 POST 和 GET 并且一切正常,但是当我尝试使用 PATCH 时(因为我必须首先上传字段“start_time”,然后添加字段“time”),我收到以下错误:

match = time_re.match(值) TypeError: 预期的字符串或缓冲区

当然是关于views.py,但我找不到明确的方法来做到这一点,因此我不知道我错在哪里。

谢谢。

Views.py

...
elif request.method = 'PATCH':
    serializer = TABLESerializer(data=request.data, partial=True)
    if serializer.is_valid():
        obj = TABLE.objects.get(start_time=request.data['start_time'])
        obj.time = serializer['time']
        obj.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

序列化器.py

class TABLESerilizer(serializers.serializer):
    start_time = serializers.DateTimeField(format = None, allow_null=True)
    time = serializers.TimeField(format=None, required=False)

models.py

class TABLE(models.Model):
    start_time=models.DateTimeField(primary_key=True)
    time = models.TimeField(null= True, blank= True, default = '00:00:00')

【问题讨论】:

    标签: python django rest


    【解决方案1】:

    format - 表示输出格式的字符串。如果没有指定, 这默认为与 TIME_FORMAT 设置键相同的值, 除非设置,否则将是“iso-8601”。

    但在您的情况下,您将其设置为 None。当python尝试将数据解析为格式为None的时间对象时出现错误,格式必须像HH:MM:SS等。

    如下所示更新您的序列化程序

    from rest_framework.settings import api_settings
    
    class TABLESerilizer(serializers.serializer):
        start_time = serializers.DateTimeField(format=api_settings.TIME_FORMAT)
        time = serializers.TimeField(format=api_settings.TIME_FORMAT)
    

    参考:http://www.django-rest-framework.org/api-guide/fields/#timefield
    https://github.com/django/django/blob/master/django/utils/dateparse.py#L80

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 2016-08-12
      相关资源
      最近更新 更多