Модифицированные выходные данные в методе to_representation в django drf

могу ли я вернуть список в методе to_representation в Django Rest Framework

?

Мне нужно изменить вывод в сериализаторе вот недавний вывод

{
    "id": 1,
    "display_sequence": 2
}

Мне нужно изменить недавний вывод на

[
  {
     "id":  1
     "display_sequence": 2
  },
  {
    "id" : 2
    "display_sequence": 1
  }
]

Итак, вторые данные я получил из фильтра запроса, основанного на id контейнера и target_container_id

instance =  Container.objects.filter(id__in=[self.container_id, self.target_container_id])

если я вернусь к сериализатору, то получу эту ошибку

enter image description here

Got AttributeError when attempting to get a value for field `display_sequence` on serializer `ContainerSequenceSwapSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `list` instance.
Original exception text was: 'list' object has no attribute 'display_sequence'.

Как я могу вернуть ожидаемый результат?

вот мои взгляды

Виды

class ContainerViewSet(viewsets.ModelViewSet):
    """Container ViewSet for CRUD operations."""

    queryset = Container.objects.all()

    def get_serializer_class(self):
        return ContainerSerializerV1


    @action(methods=["patch"], detail=True, url_path="swap-sequence")
    def swap_sequence(self, request, pk):
        # serializer = ContainerSequenceSwapSerializer(data=request.data)
        container = self.get_object()
        serializer = ContainerSequenceSwapSerializer(container, data=request.data, context={'container': container})
        if serializer.is_valid(raise_exception=True):

           # display data here
           content = serializer.data

        return Response(data=content, status=status.HTTP_200_OK)

Serializer

class ContainerSequenceSwapSerializer(serializers.ModelSerializer):
    """Serializer for Container sequence swap detail action."""

    display_sequence = serializers.IntegerField()

    # add class meta here to display id, swap sequence
    class Meta:
        model = Container
        fields = (
            "id",
            "display_sequence",
        )
        read_only_fields = ("id", "display_sequence")

    # sorting data
    def to_representation(self, instance):
        instance =  Container.objects.filter(id__in=[self.container_id, self.target_container_id])
        # data =  super().to_representation(instance)
        return instance

    # custom validation
    def validate(self, attrs):
        display_sequence = super().validate(attrs)
        container = self.context.get("container")

        if not container:
            return display_sequence

        target_display_sequence = display_sequence["display_sequence"]
        try:
            target_container = Container.objects.get(
                module=container.module, display_sequence=target_display_sequence
            )
        except Container.DoesNotExist:
            raise serializers.ValidationError(
                {"display_sequence": ["Invalid swap target"]}
            )
        else:
            # switching
            container.display_sequence, target_container.display_sequence = (
                target_container.display_sequence,
                container.display_sequence,
            )
            container.save()
            target_container.save()

        # datas
        self.container_id = container.id
        self.target_container_id = target_container.id

        return display_sequence

как я могу вернуть ожидаемый вывод без изменения views.py

Вернуться на верх