Back
Syntax
Study
Editor
Mode:
HTML
CSS
JavaScript
PHP
Reset
Run »
HTML / CSS / JS
# blog/models.py — custom manager + ORM query examples from django.db import models from django.utils import timezone class PublishedManager(models.Manager): """Return only published posts.""" def get_queryset(self): return super().get_queryset().filter(status=Post.STATUS_PUBLISHED) def recent(self, count=10): return self.get_queryset().order_by('-published_at')[:count] class Post(models.Model): STATUS_DRAFT = 'draft' STATUS_PUBLISHED = 'published' STATUS_CHOICES = [(STATUS_DRAFT, 'Draft'), (STATUS_PUBLISHED, 'Published')] title = models.CharField(max_length=200) body = models.TextField() status = models.CharField(max_length=10, choices=STATUS_CHOICES, default=STATUS_DRAFT) published_at = models.DateTimeField(null=True, blank=True) objects = models.Manager() # default manager published = PublishedManager() # custom manager class Meta: ordering = ['-published_at'] # --- ORM usage examples (e.g. in a view or shell) --- # All published posts posts = Post.published.all() # Filter + chain recent = Post.published.filter(published_at__year=2024).order_by('-published_at') # Avoid N+1: fetch author in same query from .models import Post posts = Post.published.select_related('author', 'category').recent(5) # Aggregate from django.db.models import Count stats = Post.objects.values('status').annotate(total=Count('id'))
Result
Open