簡體   English   中英

Django Rest API預期的字符串或PATCH上的緩沖區

[英]Django rest api expected string or buffer on PATCH

我正在制作Django應用程序,在這里我通過rest API發送請求。 我正在使用POST和GET,並且一切正常,但是當我嘗試使用PATCH時(因為我必須首先上載字段“ start_time”,然后添加字段“ time”),出現以下錯誤:

match = time_re.match(value)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)

Serializers.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')

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM