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
Вернуться на верх