django - Django Rest 框架嵌套序列化器
问题描述
我目前在使用 Django 休息框架执行两个分层嵌套时遇到问题。我已经阅读了具有嵌套关系的 DRF 文档http://www.django-rest-framework.org/api-guide/relations/并成功完成了第一层,即在 JSON 中显示具有多种颜色的样式。不知道如何链接另一层。任何帮助,将不胜感激。提前致谢!
当前输出如下所示:
[{
"name": "AAA123",
"colors": [
{
"name": "White"
}
]
},
{
"name": "BBB222",
"colors": [
{
"name": "White"
},
{
"name": "Pink"
},
{
"name": "Blue"
}
]
}]
想要的输出应该是这样的:
[{
"name": "AAA123",
"colors": [
{
"name": "White",
"sizes": [{name: "S"}, {name: "M"}]
}
]
},
{
"name": "BBB222",
"colors": [
{
"name": "White",
"sizes": [{name: "XS"}, {name: "S"}]
},
{
"name": "Pink"
"sizes": [{name: "XL"}, {name: "XXL"}]
},
{
"name": "Blue"
"sizes": [{name: "L"}, {name: "XL"}]
}
]
}]
具体来说,我想展示每种样式都有一组归因于它的颜色,并且每个样式-颜色组合都有一组归因于它的尺寸。
下面是我当前的 serializers.py 和 models.py 我使用了中间表,因为我计划在未来添加更多的复杂性(例如,在 style-color 我想附加彩色图片的位置和 style-color-尺寸,我会附上尺寸)
序列化程序.py
class ColorSerializer(serializers.ModelSerializer):
class Meta:
model = Color
fields = ['name']
class SizeSerializer(serializers.ModelSerializer):
class Meta:
model = Size
fields = ['name']
class StyleSerializer(serializers.ModelSerializer):
colors = ColorSerializer(many=True, read_only=True)
class Meta:
model = Style
fields = ['name', 'colors']
模型.py
class Style(models.Model):
name = models.CharField(max_length=36, unique=True)
colors = models.ManyToManyField('Color', through='StyleColor')
class Color(models.Model):
name = models.CharField(max_length=36, unique=True)
class Size(models.Model):
name = models.CharField(max_length=12, unique=True)
class StyleColor(models.Model):
style = models.ForeignKey('Style', on_delete=models.CASCADE)
color = models.ForeignKey('Color', on_delete=models.CASCADE)
sizes = models.ManyToManyField('Size', through='StyleColorSize')
class Meta:
unique_together = ('style', 'color')
class StyleColorSize(models.Model):
style_color = models.ForeignKey('StyleColor', on_delete=models.CASCADE)
size = models.ForeignKey('Size', on_delete=models.CASCADE)
class Meta:
unique_together = ('style_color', 'size')
解决方案
感谢所有试图回答的人。从这个链接的答案中获得灵感,以防有人遇到和我一样的麻烦。在 Django Rest Framework 的响应中包含中介(通过模型)。
class StyleSerializer(serializers.ModelSerializer):
colors = StyleColorSerializer(source='stylecolor_set',
many=True, read_only=True)
class Meta:
model = Style
fields = ('name', 'colors')
推荐阅读
- c# - 根据来自多个 TextBoxes MVVM 的值过滤 WPF DataGrid (DataTable)
- visual-studio - GlobalSection ExtensibilityGlobals 在 .sln 文件中重复
- php - 加入两个数组
- java - 从 PDF 缩放 PDDocument
- .net-core - 在 Azure Pipelines 构建中命名生成的 ZIP 存档?
- python - 导入的变量更新未反映在父模块中
- oracle - oracle SQL开发人员无法通过另一个表创建表
- jinja2 - Apache气流 - 无法模板化从baseOperator继承的队列名称
- linux - 带有 & 符号的远程 wget 命令未按预期运行
- postgresql - 如何限制 typeorm 连接查询?