django - 在 Django Rest Framework 中序列化多对多中间表
问题描述
我想学习如何通过整体获取多对多中间表的序列化程序数据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
},
问题:
- 第一个问题是由于多对多表而重复数据
- 我也想查看我的
product
和material
模型字段。
我的目标:
{
"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 它帮助了我。
解决方案
从文档中,
depth 选项应设置为一个整数值,该值指示在恢复为平面表示之前应遍历的关系深度。
所以,depth=1
在 Meta 类中使用
class ProductMaterialSerializer(serializers.ModelSerializer):
class Meta:
model = ProductMaterial
fields = '__all__'
depth = 1
推荐阅读
- elki - 如何在两个不同的线程上运行 LOF 类的 DatabaseUtil.precomputedKNNQuery 方法
- python - 相对导入 'six.moves.urllib',应该是 'six.moves'
- c# - 为什么将鼠标移到窗口或控件上时不会触发“IsMouseDirectlyOverChanged”?
- vba - 我有复制工作表的代码,需要帮助添加工作表名称必须在范围内的条件
- c# - 如何使用 C# Web 客户端传递嵌入式 JSON
- vba - 作为 csv 文件的不同单词样式的计数
- google-analytics - 为什么 Google Analytics(分析)中缺少某些事件?
- python - 如何获取表单选择字段值?
- sql - 复制一行并插入到oracle中的同一张表中
- python - 过滤至少有 1 行满足条件的 GroupBy 对象