Django rest框架自定义Json响应

2024-10-01 02:31:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python和Django Rest框架的新手。我试图返回一个“自定义”json响应,但我不知道如何实现我想要的结果

我正在构建一个电子商务api,其中我有带“产品”的“盒子”,这个BoxProduct模型是因为我需要产品和盒子之间的关系而创建的,但是相同的产品可以放在不同的盒子中,例如:product.id=1放在盒子中,盒子中的id=2,盒子中的id=4。这就是我创建这个中间模型的原因

box产品型号

    class BoxProduct(models.Model):
        product = models.ForeignKey(Product, on_delete=models.DO_NOTHING, null=True, related_name='box_product')
        box = models.ForeignKey(Box, on_delete=models.DO_NOTHING, null=True, related_name='box_box')
        product_price = models.DecimalField(max_digits=8, decimal_places=0, null=True, blank=True)

我试图链接Product和Box的序列化程序,但没有得到我想要的内容

BoxProduct序列化程序

class BoxProductSerializer(serializers.ModelSerializer):
    product = ProductSerializer(many=True, read_only=True)
    box = BoxSerializer()

    class Meta:
        model = BoxProduct
        fields=['box', 'product']

我们的想法是返回一个json,如下所示:

{
    "box_id": 232323,
    "box_name": "Box name Test",
    "products": [
      {
        "name": "product name 1",
        "type": "product_type"
      },
      {
        "name": "product name 2",
        "type": "product_type"
      },
      {
        "name": "product name 3",
        "type": "product_type"
      }
    ]
  }

这样做的最佳方法是什么

谢谢你的帮助


Tags: name模型boxidjsontrue产品models
1条回答
网友
1楼 · 发布于 2024-10-01 02:31:36

看起来你想得到一个盒子和盒子里的产品。为此,您应该使用BoxSerializer,而不是BoxProductSerializer

# 1. Add 'products' method to Box model:
class Box(models.Model):
  ...

  def products(self):
    return Product.objects.filter(boxproduct_set__pk__in=self.boxproduct_set)

# 2. Your BoxSerializer should look like this:
class BoxSerializer(serializers.ModelSerializer):
  products = ProductSerializer(many=True, read_only=True)

  class Meta:
    model = Box
    fields = (..., 'products')

相关问题 更多 >