About Paginating QuerySets in Management Commands

When developing Django management commands, paginate QuerySets using Django pagination to improve the performance and memory usage:

from django.core.management.base import BaseCommand
from django.contrib.auth.models import User
from django.core.paginator import Paginator

class Command(BaseCommand):
    PAGE_SIZE = 50

    def handle(self, *args, **options):
        users = User.objects.all().order_by("id")
        paginator = Paginator(users, self.PAGE_SIZE)
        for page_num in paginator.page_range:
            page = paginator.get_page(page_num)
            for user in page:
                full_name = user.get_full_name() or "No name set"
                self.stdout.write(
                    f"Name: {full_name} | "
                    f"Email: {user.email} | "
                    f"Active: {user.is_active}"
                )

Tips and Tricks Programming Performance Django 5.2 Django 4.2 Django 3.2