【发布时间】:2018-12-13 10:26:45
【问题描述】:
我目前在使用 Django REST 框架执行两个分层嵌套时遇到问题。我在这里阅读了具有嵌套关系的 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-size,我会附上尺寸)
序列化器.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']
models.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')
【问题讨论】:
-
你能添加你现在正在使用的序列化程序类,同时添加预期和当前的输出
-
嗨@JerinPeterGeorge,感谢您抽出宝贵时间尝试回答我的问题。在编辑中添加了您要求的详细信息。另外,我在想我在构建模型时可能是错误的。不确定尺寸是否应该在 Style 或 StyleColor 下。
标签: django django-rest-framework