Django Rest Framework 优化问题

问题描述 投票:0回答:0

我一直在尝试减少从调用到 DRF 中的端点的时间。当我需要来自数据库的大量数据(在本例中是与课程相对应的天数)并且结果正确返回但性能很差时,就会出现问题。

我认为问题可能出在序列化程序中,因为我带来了很多数据,但也可能出在模型中(我想)。此外,我搜索可以使用不同的序列化程序或使用 select_related 和 prefetch_related 来解决问题,但也不起作用。

我查了一下我从API调用那个方法的时间,结果是6秒300条,我觉得效率太低了

在这里,我分离了我使用的模型、视图和序列化程序。

模型: 课程(名称、横幅等)和日期(时间、开始日期、结束日期等)。第二个有一个外键“课程”,对应于一个课程实例(原因是一个课程有多个天(小时),例如:一门课程可以在周二和周四教授)

Views: getDays() -> 返回数据库中的所有 Day 实例。只是DRF自带的默认CRUD

...
serializer_class = DaySerializer
queryset = Day.objects.all()
...

Serializer: DaySerializer -> 返回所有 Day 字段,但在“course”字段中,我使用一个函数将 Course id 转换为 Course 对象。下面我分离代码。

    ...
    def to_representation(self, instance):
    response = super().to_representation(instance)
    if instance.course is not None:
        response['course'] = CourseSerializer(instance.course,
                                                  context={'request': self.context.get('request')}).data

    return response

    class Meta:
      model = Day
      fields = '__all__'
    ...

另一个解决方案: 我认为一个解决方案是删除序列化程序中的“to representation”函数,并创建一个新视图“getCourseByDayId”以从 Course 获取实例,但我认为我会遇到同样的情况,因为我每天需要打多个电话。

首先感谢您阅读本文!我很感激任何建议😁

database optimization django-rest-framework endpoint
© www.soinside.com 2019 - 2024. All rights reserved.