【发布时间】:2020-09-18 06:55:09
【问题描述】:
我正在制作商店管理 API。我会尽快描述我的问题。
当我进行交易时,我得到一个 CREATE 响应,
{
"id": 14,
"order": 1,
"shop": 3,
"product": 2,
"quantity": 2,
"bill": 600
}
但我希望得到如下产品详细信息的回复。
{
"id": 14,
"order": 1,
"shop": 3,
"product": {
"id": 2,
"name": "Product 2 for Shop 1",
"buying_price": 200,
"selling_price": 300,
"stock": 34,
"shop": 3
},
"quantity": 2,
"bill": 600
}
所以我尝试在 self.action 为 CREATE 时更改序列化程序。但问题是,现在它在我的事务中显示产品创建字段。
模型
class Product(models.Model):
"""Product model"""
name = models.CharField(max_length=255)
shop = models.ForeignKey(Shop, on_delete=models.CASCADE)
buying_price = models.PositiveIntegerField(default=0)
selling_price = models.PositiveIntegerField(default=0)
stock = models.PositiveIntegerField(default=0)
def __str__(self):
return self.name
class Transaction(models.Model):
"""Model for keeping customer ordered items"""
order = models.ForeignKey(CustomerTrasnscation, on_delete=models.CASCADE, null=True)
product = models.ForeignKey(Product, on_delete=models.CASCADE, null=True)
quantity = models.PositiveIntegerField(default=0)
bill = models.PositiveIntegerField(default=0)
shop = models.ForeignKey(Shop, on_delete=models.CASCADE, null=True)
视图集
class TransactionViewSet(viewsets.ModelViewSet):
authentication_classes = (TokenAuthentication,)
queryset = models.Transaction.objects.all()
serializer_class = serializers.TransactionSerializer
def perform_create(self, serializer):
own_shop = getShop(self.request.user)
serializer.save(shop=own_shop)
def get_serializer_class(self):
if self.action in ["list", "retrieve", "create"]:
return serializers.Trasnscation_With_ProductDetailSerializer
return self.serializer_class
问题
注意: Trasnscation_With_ProductDetailSerializer 在 list 和 retrieve 操作上运行良好。
【问题讨论】: