我们想为django项目提供一个api,因此我们使用drf(django rest框架)。
我们使用ModelSerializer,它提供了一个快捷方式,可让您自动创建带有与Model字段相对应的字段的Serializer类。
我们的问题是运行非常缓慢。换句话说,序列化过程大约需要40秒才能检索到响应。

我们如何减少这种延迟?
View

class MyObjViewSet(viewsets.ModelViewSet):

    pagination_class = LargeResultsSetPagination

    def get_queryset(self):
        queryset = MyObj.objects.all().order_by('time')
        return queryset

    serializer_class = MyObjSerializer

我的对象模型
class MyObj(models.Model):
    id = models.BigIntegerField(primary_key=True)
    time = models.DateTimeField()
    type = models.CharField(max_length=5)
    user = models.ForeignKey('User', related_name='myobj')

MyObj用户模型
class User(models.Model):
    id = models.IntegerField(primary_key=True)
    username = models.CharField(max_length=80)

我的Obj序列化器
class MyObjSerializer(serializers.ModelSerializer):

    class Meta:
        model = MyObj
        fields = ('id', 'type', 'time', 'user')

我的问题是,当我想检索我的objs列表时,大约需要40秒!

最佳答案

这不是序列化程序的问题,而是查询中的问题。

您正在获取所有对象,由于分页,我想有很多对象,并且您希望它们按时间排序。问题在于模型定义没有提示数据库在时间字段上创建索引。

尝试添加提示以在数据库中创建索引,速度将会提高。

  class MyObj(models.Model):
      id = models.BigIntegerField(primary_key=True)
      time = models.DateTimeField(db_index=True)
      type = models.CharField(max_length=5)
      user = models.ForeignKey('User', related_name='myobj')

07-24 22:25