В настоящее время у меня возникают проблемы с выполнением двухслойного вложения с Django rest framework. Я прочитал документы 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 я хотел бы прикрепить расположение цветной картинки и в стиле -размер, приложу замеры)
serializers.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')