
AI Wrote It. Your Database Paid for It: How get_object() in DRF Actions Quietly Kills Backend Performance
A pattern that looks clean, “idiomatic,” and AI-approved: @action(detail=True, methods=["put"]) def close_ticket(self, request, pk=None): ticket = self.get_object() workflow_service.close_ticket(ticket=ticket, actor=request.user) return Response(TicketDetailSerializer(ticket).data) It works. It ships. Everyone is happy. Until you profile it. The trap — the black horse hiding in plain sight — is self.get_object(). In this case self.get_object() does not fetch “a ticket.” It evaluates the entire get_queryset() for that view. If get_queryset() is built for rich list/retrieve responses, this action may trigger heavy joins/prefetches for data it never uses. Let's look at this code: class TicketViewSet(ModelViewSet): serializer_class = TicketSerializer def get_queryset(self): qs = ( Ticket.objects .select_related("requester", "assignee", "project", "project__customer") .prefetch_related( "labels", "watchers", "attachments", Prefetch("comments", queryset=Comment.objects.select_related("author
Continue reading on Dev.to
Opens in a new tab




