我们有四个相关的模型,同时返回查询集序列化数据太慢(serializer.data)。下面是我们的模型和序列化器。
为什么 Django 嵌套序列化器返回渲染响应的时间太长。我们在这里做错了什么?
注意:当从 EC2 实例连接时,我们的数据库位于 AWS 中,但当从我的本地主机尝试时,它非常慢。返回的json大小为700KB。
模型.py
class ServiceType(models.Model):
service_name = models.CharField(max_length = 100)
description = models.TextField()
is_active = models.BooleanField(default = 1)
class Service(models.Model):
service_name = models.CharField(max_length = 100)
service_type = models.ForeignKey(ServiceType, related_name = "type_of_service")
min_duration = models.IntegerField() ##duration in mins
class StudioProfile(models.Model):
studio_group = models.ForeignKey(StudioGroup, related_name = "studio_of_group")
name = models.CharField(max_length = 120)
class StudioServices(models.Model):
studio_profile = models.ForeignKey(StudioProfile, related_name = "studio_detail_for_activity")
service = models.ForeignKey(Service, related_name = "service_in_studio")
class StudioPicture(models.Model):
studio_profile = models.ForeignKey(StudioProfile, related_name = "pic_of_studio")
picture = models.ImageField(upload_to = 'img_gallery', null = True, blank = True)
序列化器.py
class ServiceTypeSerializer(serializers.ModelSerializer):
class Meta:
model = ServiceType
fields = ('id', 'service_name')
class ServiceSerializer(serializers.ModelSerializer):
service_type = ServiceTypeSerializer()
class Meta:
model = Service
fields = ('id', 'service_type', 'service_name')
class StudioServicesSerializer(serializers.ModelSerializer):
service = ServiceSerializer()
class Meta:
model = StudioServices
fields = ('service','price','is_active','mins_takes')
class StudioPictureSerializer(serializers.ModelSerializer):
class Meta:
model = StudioPicture
fields = ('picture',)
class StudioProfileSerializer(serializers.ModelSerializer):
studio_detail_for_activity = StudioServicesSerializer(many = True)
pic_of_studio = StudioPictureSerializer(many = True)
class Meta:
model = StudioProfile
fields = ('id', 'name','studio_detail_for_activity','pic_of_studio')
View .py
class StudioProfileView(ListAPIView):
serializer_class = StudioProfileSerializer
model = StudioProfile
def get_queryset(self):
try:
queryset = self.model.objects.all()
except Exception ,e:
logger_error.error(traceback.format_exc())
return None
else:
return queryset
请您参考如下方法:
你检查过哪个部分是慢的吗?比如,你在那个数据库中有多少条记录?我会尝试运行查询并检查查询是否很慢,然后我会检查少于 100 个寄存器的序列化器等等。
我建议您阅读这篇文章 http://www.dabapps.com/blog/api-performance-profiling-django-rest-framework/为了评估如何分析您的 API
问候
