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 599
- Last Modified 06 January, 2026
- Tags #cbv #queryset #override #views
Previous snippet
DeleteView with Confirmation
Next snippet