Объекты в объектном API Django

Почему, когда я получаю все products в included_lessons вместо объектов я получаю только их ID, когда я хочу получить полный объект: id, имя и так далее.

Что я получаю:

[
    {
        "id": 5,
        "author": "author",
        "name": "math product",
        "start_time": "2024-03-01T08:25:17Z",
        "min_users_in_group": 5,
        "max_users_in_group": 1,
        "included_lessons": [
            7,
            8,
            9
        ]
    }
]

Что я хочу получить:

[
    {
        "id": 5,
        "author": "author",
        "name": "math product",
        "start_time": "2024-03-01T08:25:17Z",
        "min_users_in_group": 5,
        "max_users_in_group": 1,
        "included_lessons": [
            {
                "id": 1,
                "name": "some name",
                "something else": "something else"
            },
            {
                "id": 2,
                "name": "some name 2",
                "something else": "something else 2"
            }
        ]
    }
]

Модель:

class Product(models.Model):
    author = models.CharField(max_length=64)
    name = models.CharField(max_length=64)
    start_time = models.DateTimeField()
    min_users_in_group = models.IntegerField()
    max_users_in_group = models.IntegerField()
    included_lessons = models.ManyToManyField(Lesson, related_name='lessons')

    class Meta:
        db_table = 'product'

    def __str__(self):
        return self.name

Сериализатор:

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = '__all__'

Вид модели:

class ProductApiView(viewsets.ReadOnlyModelViewSet):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer

Я пытался изменить queryset в API View model, но это бесполезно

Укажите субсериализатор:

class LessonSerializer(serializers.ModelSerializer):
    class Meta:
        model = Lesson
        fields = '__all__'


class ProductSerializer(serializers.ModelSerializer):
    lessons = LessonSerializer(many=True)

    class Meta:
        model = Product
        fields = '__all__'

Вы можете еще больше увеличить производительность, извлекая все связанные Lesson в одном запросе:

class ProductApiView(viewsets.ReadOnlyModelViewSet):
    queryset = Product.objects.prefetch_related('lessons')
    serializer_class = ProductSerializer
Вернуться на верх