Объекты в объектном 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