问题出在OrderRodSerializer类中,当我试图从OrderProd模型中获取一些信息时,我可以正确地获取ID,但它忽略了其他字段,如"Quantity"和"Date".

型号:

class Product(models.Model):
    ...
    name  = models.CharField(max_length=100, blank=True, null=True)
    price = models.DecimalField(max_digits=6,decimal_places=2)
    ...
  
class Order(models.Model):
    user    = models.ForeignKey("main.User", on_delete=models.CASCADE)
    details = models.ManyToManyField(Product, through="OrderProd")
    ...
    
    
class OrderProd(models.Model):
    product  = models.ForeignKey(Product, on_delete=models.CASCADE)
    order    = models.ForeignKey(Order  ,  on_delete=models.CASCADE)
    quantity = models.IntegerField(default=0)
    date     = models.DateTimeField(default=timezone.now)
   

OrderProd序列化程序:

class OrderProdSerializer(serializers.ModelSerializer):
    product_name = serializers.CharField( source='name')
    product_price= serializers.DecimalField(max_digits=20,decimal_places=2,source='price')
    class Meta:
        model=OrderProd
        fields=["id","product_name","quantity","product_price","date"]
        read_only_fields = ('id',)
  

      
class OrderSerializer(serializers.ModelSerializer):
    details = OrderProdSerializer(many=True)
    class Meta:
        model=Order
        fields=["id","details","created_date","order_date"]
        read_only_fields = ('id', )
            

结果是:

[
    {
        "id": 1,
        "details": [
            {
                "id": 1,
                "product_name": "t-shirt",
                "product_price": "20.00",
            }
        ],
        "created_date": "2023-07-25T17:34:45Z",
        "order_date": null
    }
]

理应是:

[
    {
        "id": 1,
        "details": [
            {
                "id": 1,
                "product_name": "t-shirt",
                "product_price": "20.00",
                "quantity": 2 ,
                "date": "2023-07-25"
            }
        ],
        "created_date": "2023-07-25T17:34:45Z",
        "order_date": null
    }
]

推荐答案

非常感谢!我已经找到了解决方案:

解决办法是在细节上增加来源

    details = OrderProdSerializer(many=True,read_only=True, source='orderprod_set')

我在OrderRodSerializer中做了一些更改

class OrderProdSerializer(serializers.ModelSerializer):
  
    product_name = serializers.CharField( source='product.name')
    product_price = serializers.CharField( source='product.price')

    class Meta:
        model=OrderProd
        fields=["id","order","quantity","date","product","product_name","product_price"]
        read_only_fields = ('id', )

Json相关问答推荐

过go 24小时内判断员事件的EventBridge事件模式

属性错误:';ActivitiesClient';对象没有属性';base_url';

Jolt-在数组列表中插入新的字段

交换键和数组值,将旧键转换为新数组值,使用 jq

根据值过滤输入的JSON并使用它准备预期的输出

Spark-SQL中的from_unixtime函数未能给出正确的输出

如何强制仅有一个元素的数组在JSON中生成方括号

遍历 JSON,检索父值

在这种情况下我如何实现 UnmarshalJSON 并且只为一个接口字段定义特殊行为?

判断golang中解析的json响应中是否存在所需的json键(不是值)

如何将从嵌套 Select 返回的空值转换为空数组?

使用 json_query 过滤嵌套列表中的元素

解析 JSON API 响应

从 JSON 对象中删除键值对

Golang struct 的 XML 和 JSON 标签?

杰克逊在通用列表中读取 json

Microsoft.Net.Http 与 Microsoft.AspNet.WebApi.Client

处理 HTTP 请求正文中的可选 JSON 字段

如果键可能不存在,则从 Python dict 读取

按键值过滤 JSON