Using QuerySet filter()
A snippet showing how to use filter() to query Django models.
# models.py
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=120)
category = models.CharField(max_length=50)
price = models.DecimalField(max_digits=8, decimal_places=2)
in_stock = models.BooleanField(default=True)
def __str__(self):
return self.name
# views.py
from django.shortcuts import render
from .models import Product
def product_list(request):
qs = Product.objects.filter(in_stock=True)
q = request.GET.get('q')
if q:
qs = qs.filter(name__icontains=q)
return render(request, 'products.html', {'products': qs})
# views.py (advanced lookups)
from django.db.models import Q
from .models import Product
def search_products(request):
qs = Product.objects.filter(
Q(price__gte=10) & Q(price__lte=100),
category__in=['books', 'games'],
in_stock=True
)
return render(request, 'products.html', {'products': qs})
# Django Shell
>>> from shop.models import Product
>>> Product.objects.filter(in_stock=True).count()
>>> Product.objects.filter(name__icontains='pro')
>>> Product.objects.filter(price__gte=50, price__lte=150)
>>> Product.objects.filter(category__in=['books', 'games'])
Explanation:
-
filter()returns a new QuerySet with rows matching the given conditions; chain it freely for refinement. -
Use lookups like
field__icontains,field__gte,field__lte, and membership with__in. -
Combine conditions with
Q()for complex OR/AND logic while keeping code readable. - QuerySets are lazy; evaluation happens on iteration, slicing, or when forcing results in templates.
- Category Models & ORM
- Total Views 471
- Last Modified 02 December, 2025
- Tags #queryset #filter #orm #models
Previous snippet
Custom Model Manager
Next snippet