django - 在 Django Rest Framework 中序列化多对多中间表

标签 django serialization django-rest-framework many-to-many

我想学习如何整体获取多对多中间表的序列化程序数据 model ,不仅仅是通过 id。

#this is my model class
class ProductMaterial(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    material = models.ForeignKey(Material, on_delete=models.CASCADE)
    material_rate = models.FloatField(blank=True, null=True)
    material_price = models.FloatField(blank=True, null=True)



#serializer
class ProductMaterialSerializer(serializers.ModelSerializer):
       class Meta:
           model = ProductMaterial
           fields = '__all__'

这将返回:
    {
        "id": 1,
        "material_rate": 0.3,
        "material_price": 6.7,
        "product": 186,
        "material": 7
    },
   {
        "id": 2,
        "material_rate": 0.7,
        "material_price": 1.7,
        "product": 186,
        "material": 8
    },

问题:
  • 第一个问题是由于多对多表而重复数据
  • 我想看看我的 productmaterial模型字段也是。

  • 我的目标:
    {
        "id": 1,
        "product": {
                     "name" : "abcd",
                     "date" : "01.01.2018"
    
                    },
        "material": [
                      {
                         "id" : 7,
                         "material_rate" : 0.3,
                         "material_price" : 6.7,
    
                      },
                      {
                         "id" : 8,
                         "material_rate" : 0.7,
                         "material_price" : 1.7,
    
                      },
                   ]
    },
    

    解决方案2:

    我已经实现了这个解决方案 -> https://stackoverflow.com/a/45834689/5491260
    它帮助了我。

    最佳答案

    从文档中,

    The depth option should be set to an integer value that indicates the depth of relationships that should be traversed before reverting to a flat representation.



    所以,使用 depth=1 在元类中
    class ProductMaterialSerializer(serializers.ModelSerializer):
           class Meta:
               model = ProductMaterial
               fields = '__all__'
               depth = 1

    关于django - 在 Django Rest Framework 中序列化多对多中间表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52295480/

    相关文章:

    python - 如何计算django中两个日期之间的差异

    c# - 序列化 JSON 时忽略空值

    django - Django Rest 框架的 Stormpath

    rest - 新的API版本是否也应该支持旧版本的所有API? [设计问题]

    Django Rest Framework 将数据发送到没有序列化程序的 View

    Django + 什么NOSQL在生产中使用最成熟?

    Django 测试加载装置 auth.group

    java - 序列化一个不实现可序列化的类变量

    java - 如何将对象序列化到数据库以供 Hibernate 在 Java 中读取

    python - 如何从 Django 中的查询集中获取所有相关字段?