Django rest framework 如何使用客户端处理延迟加载数据表?

Django rest framework 如何使用客户端处理延迟加载数据表?,django-rest-framework,datatables,Django Rest Framework,Datatables,我有一个包含3500个条目和外键的表 我正在使用客户端处理数据表:django rest框架和Ajax 加载最多需要10秒 有没有一种方法可以显示前10个条目(第一页结果)——让用户不会认为我的网站坏了,因为它花了太长时间——而其余条目则在后台加载 同时也在寻找负载速度的优化。 谢谢你抽出时间 编辑: models.py class Bibrest51(models.Model): cadastro_id = models.AutoField(primary_key=True)

我有一个包含3500个条目和外键的表

我正在使用客户端处理数据表:django rest框架和Ajax

加载最多需要10秒

有没有一种方法可以显示前10个条目(第一页结果)——让用户不会认为我的网站坏了,因为它花了太长时间——而其余条目则在后台加载

同时也在寻找负载速度的优化。 谢谢你抽出时间

编辑: models.py

class Bibrest51(models.Model):
    cadastro_id = models.AutoField(primary_key=True)
    autor = models.CharField(db_column='Autor', max_length=255, blank=True, null=True)
    tema = models.ForeignKey('BibTema', models.DO_NOTHING, blank=True, null=True)

    tipo = models.ForeignKey('Tipo', models.DO_NOTHING, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'bibrest51'
    @property
    def bib_tipo_nome(self):
        return self.tipo.tipo_nome

class BibTema(models.Model):
    tema_id = models.AutoField(primary_key=True)
    tema_nome = models.CharField(max_length=150, blank=True, null=True)
    class Meta:
        managed = False
        db_table = 'tema'
    def __str__(self):
        return self.tema_nome
序列化程序.py

class TemaSerializer(serializers.ModelSerializer):
    class Meta:
        model = BibTema
        fields = '__all__'   
        depth = 1

class TipoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Tipo
        fields = '__all__'
        depth= 1

class BibSerializer(serializers.ModelSerializer):
    temas = TemaSerializer(read_only=True)
    tipos = TipoSerializer(read_only=True)
    class Meta:
        model = Bibrest51
        fields = (
            'autor', 'ano', 'titulo', 'referencia','tipos','temas'
            
        ) 

对于优化,您可以使用:

  • 使用及
有没有一种方法可以显示前10个条目(第一页结果)——让用户不会认为我的网站坏了,因为它花了太长时间——而其余条目则在后台加载

您可以通过分页来实现这一点。请求前10条记录,如果记录总数超过10条,则在后台请求其余记录

更新 对于序列化程序,请尝试以下操作:

class TemaSerializer(serializers.ModelSerializer):
    class Meta:
        model = BibTema
        fields = '__all__'   
        # depth= 1   # delete string

class TipoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Tipo
        fields = '__all__'
        # depth= 1   # delete string

class BibSerializer(serializers.ModelSerializer):
    temas = TemaSerializer(read_only=True, sourse='tema')
    tipos = TipoSerializer(read_only=True, sourse='tipo')
    class Meta:
        model = Bibrest51
        # There are fewer fields in the code you provided, 
        # so I rely on you for this.
        fields = (
            'autor', 'ano', 'titulo', 'referencia','tipos','temas'
            
        ) 

使用页面大小为10行的,您可能会(也可能不会)看到一些改进(例如)。否则,可能需要使用。我从未使用过它,但该插件可能也值得一看。@andrewjames我尝试了bdeferrender选项,但速度没有变化,我将查看插件,谢谢我与我的客户交谈,Scroller不是选项嗨,谢谢你的回答,你能给出我需要使用的js代码的指针吗:请求前10条记录,然后在后台加载其余的记录?我不明白你怎么看结果。为什么不实现常规分页或滚动分页?我使用分页(10项),但数据仍然是预先加载的,根据我的客户端,滚动不是一个选项。我尝试使用嵌套序列化,但没有成功。您没有指定如何查看结果。试着读一下老师的答案。以及嵌套序列化的失败之处。你能提供模型和序列化程序的代码吗?