Как уменьшить количество sqls, генерирующих Django отдыхающие сервисы - PullRequest
0 голосов
/ 26 января 2019

Мне нужна помощь для повышения производительности API.Ниже мой подход также я попытался сделать другую комбинацию полей с select_related или prefetch_related, но все же я получаю как 400sqls.

model.py

    class VisVisits(models.Model):    
            visit_id = models.IntegerField(primary_key=True)
null=True)
            class Meta:
                managed = False
                db_table = 'vis_visits'

        def __str__(self):
            return str(self.visit_id)

    class VisVisitData(models.Model):

        vdata_id = models.IntegerField(primary_key=True)
        app_local_id = models.IntegerField(blank=True, null=True)
        visit = models.ForeignKey('VisVisits', models.DO_NOTHING, blank=True, null=True, related_name='data')    
        class Meta:
            managed = False
            db_table = 'vis_visit_data'

        def __str__(self):
            return str(self.vdata_id)

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

class VisVisitDataSerializer(serializers.ModelSerializer):

     class Meta:
        model = VisVisitData
        field = '__all__'

class VisVisitsSerializer(serializers.ModelSerializer):

    data = VisVisitDataSerializer(many=True)

    class Meta:
        model = VisVisits
        fields = ('visit_id','data')

views.py

visit_data = VisVisits.objects.filter(is_valid=1,user_id=u).prefetch_related('school_program__school')
visit_data_serializer = VisVisitsSerializer(visit_data,context={'request':request},many=True)

1 Ответ

0 голосов
/ 26 января 2019

Чтобы уменьшить количество запросов, вы должны предварительно выбрать данные, которые вы сериализуете в VisVisitsSerializer, т.е. data. В этот сериализатор вы не включаете school_program, поэтому нет необходимости предварительно выбирать его. Вы можете использовать панель инструментов отладки django (https://django -debug-toolbar.readthedocs.io / en / latest / ), чтобы проверить повторяющиеся запросы и выяснить, что нужно вставить в select_releted / prefetch_related

...