Я учусь Django и использую Django Rest Framework. В моем приложении у меня есть три разные модели
- Бар (содержит информацию о баре, имеет несколько сортов пива через модель BarBeer)
- Пиво (содержит информацию о пиве)
- BarBeer (соединение между баром и пивом, имеет сводные поля, такие как алкоголь, тип, цена и объем)
Вот как определяются различные модели:
class Bar(models.Model):
name = models.CharField(max_length=60)
location = models.PointField()
address = models.CharField(max_length=60)
description = models.TextField(default='')
beers = models.ManyToManyField('api.Beer', through='api.BarBeer')
class Beer(models.Model):
name = models.CharField(max_length=60)
alcohol = models.FloatField(default=0)
class BarBeer(models.Model):
bar = models.ForeignKey(Bar, on_delete=models.CASCADE)
beer = models.ForeignKey(Beer, on_delete=models.CASCADE)
price = models.FloatField(default=0)
type = EnumField(Type, default=Type.Cask)
volume = models.IntegerField(default=0)
Теперь я хочу сериализовать данный бар со всеми сортами пива для этого конкретного бара , включая дополнительные поля в сводной модели BarBeer
. Например, ниже я хотел бы получить выходные данные (обратите внимание на три дополнительных поля на пиве, которые получены из модели BarBeer):
{
"id": 1,
"name": "A bar",
"beers": [
{
"id": 1,
"name": "Ship Full of IPA",
"alcohol": 6.5,
"type": "bottle",
"price": "35",
"volume": "33"
}
]
}
Я не могу понять, как получить дополнительные поля из сводной модели как часть сериализованного вывода. Вот как сейчас выглядит мой сериализатор:
class BarDetailsSerializer(serializers.ModelSerializer):
class Meta:
model = Bar
fields = ('id', 'name', 'beers')
depth = 3