Сериализатор Django REST Framework - превратить поле id в заголовок, сохраняя метод POST - PullRequest
0 голосов
/ 28 октября 2019

Я создаю корзину со списком товаров. Я пытаюсь превратить свои идентификаторы продуктов в названия, но при этом могу использовать методы POST / PUT для продуктов, чтобы иметь возможность добавлять / удалять продукты.

Ранее мои товары в корзине отображались как идентификаторы, это был мой сериализатор:

class CartSerializer(serializers.ModelSerializer):

    url             = serializers.HyperlinkedIdentityField(
                            view_name='cart-api:cart-detail',
                            read_only=True,
                            lookup_field='id',
                            )
    class Meta:
        model = Cart
        fields = [
            "id",
            "url",
            "products",
            "sub_total",
            "shipping",
            "total",

        ]

enter image description here

После внесения некоторых измененийЯ смог превратить идентификаторы продуктов в названия и несколько других полей, связанных с каждым продуктом. Вот мой код сериализатора после изменений:

Но мои продукты исчезли из моего метода put, и я больше не могу добавлять / удалять продукты. (фрагмент 2)

Как мы можем сохранить методы POST / PUT на моем продукте, отображая их так, как я хочу во фрагменте 2? Большое спасибо заранее!

class MyPaintingSerializer(serializers.ModelSerializer):
    painting_url             = serializers.HyperlinkedIdentityField(
                                view_name='paintings-api:detail',
                                read_only=True,
                                lookup_field='slug'
                                )


    class Meta:
        model = Painting
        fields = [
            'id',
            'title',  
            'painting_url',
            'price',                
        ]


class CartSerializer(serializers.ModelSerializer):

    url             = serializers.HyperlinkedIdentityField(
                            view_name='cart-api:cart-detail',
                            read_only=True,
                            lookup_field='id',
                            )
    products     = MyPaintingSerializer(many=True, read_only=True)

    class Meta:
        model = Cart
        fields = [
            "id",
            "url",
            "products",
            "sub_total",
            "shipping",
            "total",
        ]

enter image description here

Вот мой код для views.py

class CartListCreateAPIView(generics.ListCreateAPIView):

    queryset            = Cart.objects.all()
    serializer_class    = CartSerializer
    permission_classes  = [permissions.AllowAny]    

    def perform_create(self, serializer):
        serializer.save()

    def get_queryset(self):
        queryList = Cart.objects.all()

        cart_id = self.request.session.get("cart_id", None)

        return queryList


class CartDetailAPIView(generics.RetrieveUpdateDestroyAPIView):
    queryset            = Cart.objects.all()
    serializer_class    = CartSerializer
    lookup_field        = 'id'   
    permission_classes  = [permissions.AllowAny]

...