Django Rest Framework: сериализация списка идентификаторов - PullRequest
0 голосов
/ 25 декабря 2018

Есть ли способ сериализации полезной нагрузки запроса, такой как {'ids': [1,2,3]}, как ListField первичных ключей (т. Е. Проверка сериализатором, существуют ли объекты Task с такими идентификаторами)?

Или какой подход я должен использовать для написанияПредставление API для другого микросервиса для подтверждения того, что задачи поставлены в очередь?

serializer = ConfirmationSerializer(
    data=request.data, many=True
)
queryset = Task.objects.filter(
    ids_in=serializer.data.ids,
    status=Task.STATUS_CREATED,
)

queryset.update(
    status=Task.STATUS_SENT,
    confirmed_at=dt.datetime.now()
)
return Response({'status': 'ok'})

1 Ответ

0 голосов
/ 25 декабря 2018

PrimaryKeyRelatedField может использоваться для сериализации списка первичных ключей.Просто передайте аргумент queryset для проверки ввода поля, и внутри метода create вы получите доступ к списку Task объектов для обновления

class ConfirmationSerializer(Serializer):
    tasks_ids = PrimaryKeyRelatedField(
        many=True, 
        queryset=Task.objects.filter(status=Task.STATUS_CREATED)
    )

    def create(self, validated_data):
        task_list = validated_data['tasks_ids']

        # Update the tasks here
        update_task_list(task_list)

Помните, что task_list не является набором запросов(это список Task объектов), будет невозможно вызвать что-то вроде task_list.update().Действие обновления должно быть выполнено для каждого объекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...