Я создаю корзину со списком товаров. Я пытаюсь превратить свои идентификаторы продуктов в названия, но при этом могу использовать методы 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",
]
После внесения некоторых измененийЯ смог превратить идентификаторы продуктов в названия и несколько других полей, связанных с каждым продуктом. Вот мой код сериализатора после изменений:
Но мои продукты исчезли из моего метода 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",
]
Вот мой код для 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]