Django Rest - извлечение данных из вложенного класса
В моем следующем выводе (ниже) я хотел бы получить значение из поля rating
. Как вы можете видеть, для данной модели автомобиля существует два тарифа. Значение из rating
будет необходимо для расчета среднего тарифа для этой модели.
{
"id": 4,
"make": "Citroen",
"model": "C4",
"rates": [
{
"id": 6,
"rating": 4,
"car_id": 4
},
{
"id": 7,
"rating": 4,
"car_id": 4
}
],
"avg_rating": 0.0
}
Вот мой models.py:
class Car(models.Model):
make = models.CharField(max_length=15)
model = models.CharField(max_length=15)
avg_rating = models.FloatField(default=0)
def __str__(self): # print it when Car instance is needed
return self.make
class CarRate(models.Model):
car_id = models.ForeignKey(Car, related_name='rates',
on_delete=models.CASCADE,
default=0)
rating = models.PositiveIntegerField(default=0)
Вы столкнулись с ошибкой?
Пробовали ли вы писать серийники для этих моделей?
Смотрите здесь: https://www.django-rest-framework.org/tutorial/1-serialization/#using-modelserializers
Одним из вариантов может быть создание поля SerializerMethodField для avg_rating в CarSerializer.
Что-то вроде этого:
class CarSerializer(serializers.ModelSerializer):
rates = CarRateSerializer(many=True, read_only=True)
avg_rating = serializers.SerializerMethodField()
class Meta:
model = Car
fields = ('id', 'make', 'model','rates','avg_rating')
def get_avg_rating(self, obj):
// obj will hold your current Car object
// Code for finding the CarRate objects using the Car obj
// Average calculation - avg_rating = total_rating/no_of_ratings
return avg_rating