Недопустимый литерал int() с основанием 10: '[' при выполнении фильтра по request.body

def patch(self, request):
        Claim.objects.filter(id__in=request.body, presented_to_client=False).update(presented_to_client=True, presented_to_client_date=datetime.datetime.now())
        return HttpResponse(status=200)

Я пытаюсь обновить некоторые объекты таким образом. Но я получаю

invalid literal for int() with base 10: '['

Поэтому я подумал, что мне, возможно, нужно привести request.body к list, и попробовал сделать это так:

def patch(self, request):
        Claim.objects.filter(id__in=list(request.body), presented_to_client=False).update(presented_to_client=True, presented_to_client_date=datetime.datetime.now())
        return HttpResponse(status=200)

и я все еще получаю ту же ошибку.

Почему это происходит? Если я закодирую его таким образом:

id__in=[8]

Я не получаю никаких ошибок.

Спасибо.

request.body is a binary string that contains [8], not a list with an int. You can parse it as JSON with json.loads(…) [Python-doc]:

from django.db.models import Now
import json

def patch(self, request):
    Claim.objects.filter(
        id__in=json.loads(request.body),
        presented_to_client=False
    ).update(
        presented_to_client=True,
        presented_to_client_date=Now()
    )
    return HttpResponse(status=200)
Вернуться на верх