我需要帮助来改善API性能。下面是我的方法,我也尝试做其他与select_related或prefetch_related相关的字段组合,但我仍然收到类似400sqls的信息。
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')
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)
答案 0 :(得分:0)
要减少查询数量,您必须预取在VisVisitsSerializer
中序列化的数据,即data
。在此序列化程序中,您不包括school_program
,因此不必预取它。您可以使用django调试工具栏(https://django-debug-toolbar.readthedocs.io/en/latest/)检查重复的查询,并找出要放入select_releted
/ prefetch_related