柳 L*_*Lau 6 django django-rest-framework
我目前在使用 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"
}
]
}]
Run Code Online (Sandbox Code Playgroud)
想要的输出应该是这样的:
[{
"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"}]
}
]
}]
Run Code Online (Sandbox Code Playgroud)
具体来说,我想表明每种样式都有一组归属于它的颜色,并且每种样式-颜色组合都有一组归属于它的尺寸。
下面是我当前的 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']
Run Code Online (Sandbox Code Playgroud)
模型.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')
Run Code Online (Sandbox Code Playgroud)
柳 L*_*Lau 10
感谢所有试图回答的人。从这个链接的答案中获得灵感,以防有人遇到和我一样的麻烦。在 Django Rest Framework 的响应中包含中介(通过模型)。
class StyleSerializer(serializers.ModelSerializer):
colors = StyleColorSerializer(source='stylecolor_set',
many=True, read_only=True)
class Meta:
model = Style
fields = ('name', 'colors')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14218 次 |
| 最近记录: |