Optimizing DRF performance

I am trying to optimize a DRF view that has very low performance, is there a way to make it faster? This is where I am right now

Models:

class CategoryVideos(models.Model):
    class Meta:
        verbose_name = 'Category'
        verbose_name_plural = 'Categories'
    name = models.CharField(max_length=100, null=False, blank=False)

    def __str__(self):
        return f"{self.name} and {self.id}"

class Videos(models.Model):
    category = models.ManyToManyField(CategoryVideos, null=True, blank=True)
    illustration = models.FileField(null=True, blank=True) 
    video = models.FileField(null=True, blank=True)
    title = models.CharField(max_length=255, null=True, blank=True)
    description = models.CharField(max_length=255, null=True, blank=True)
    url_video = models.CharField(max_length=255, null=True, blank=True)
    url_image = models.CharField(max_length=255, null=True, blank=True)

Serializers:

class CategorySerializer2(serializers.ModelSerializer):
    class Meta:
        model = CategoryVideos
        fields = ["name"] 

class VideoSerializer(serializers.ModelSerializer):

    category = CategorySerializer2(many=True, read_only=True) 

    class Meta:
        model = Videos
        fields = ["id", "description", "title", "url_video", "url_image", "category"]
        read_only=True

View:


class OfferListAPIView(generics.ListAPIView):
    queryset  = Videos.objects.prefetch_related('category').all()
    serializer_class=VideoSerializer

For the moment, with 400 videos and just 6 categories, it takes approx 2.8 secs to get an answer which is way too high. Many thanks

As you are using only for listing you can add db_index=True attribute for any field you can also use db_index=True to create an index on a ForeignKey and ManyToManyFields for performance.
make note that creating indexes can slow down the performance of some database operations, such as inserting or updating large amounts of data.

Back to Top