Override get_queryset in CBV

Filter, annotate, or select related data in CBVs.


# models.py

from django.db import models

class Order(models.Model):
    number = models.CharField(max_length=20)
    status = models.CharField(max_length=20, default="NEW")
  

# admin.py

from django.contrib import admin
from .models import Order

@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
    list_display = ("number","status")
  


# views.py
from django.views.generic import ListView
from django.db.models import Count
from .models import Order
class ShippedOrders(ListView):
    model = Order
    template_name = "orders/shipped.html"
    def get_queryset(self):
        return (Order.objects
                .filter(status="SHIPPED")
                .only("number","status"))

# urls.py
path("orders/shipped/", ShippedOrders.as_view(), name="shipped-orders")
  
Explanation:
  • Override get_queryset() to filter per-request (e.g., user).
  • Use only()/select_related() for performance.
  • Category Views (FBV & CBV)
  • Total Views 600
  • Last Modified 06 January, 2026
  • Tags #cbv #queryset #override #views
Never miss a story on Django.wiki

Subscribe for fresh tutorials, snippets, and updates.

By subscribing you agree to our Privacy Policy.