python 44 lines · 1 tab

Django model inheritance with proxy models

Priya Sharma Jan 2026
1 tab
from django.db import models


class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    status = models.CharField(max_length=20)
    published_at = models.DateTimeField(null=True)

    class Meta:
        ordering = ['-published_at']


class PublishedPostManager(models.Manager):
    def get_queryset(self):
        return super().get_queryset().filter(status='published')


class PublishedPost(Post):
    """Proxy model showing only published posts."""

    objects = PublishedPostManager()

    class Meta:
        proxy = True
        ordering = ['-published_at']

    def publish(self):
        """Publish this post."""
        self.status = 'published'
        from django.utils import timezone
        self.published_at = timezone.now()
        self.save()


class FeaturedPost(Post):
    """Proxy for featured posts with different display."""

    class Meta:
        proxy = True
        verbose_name = 'Featured Post'

    def __str__(self):
        return f'⭐ {self.title}'
1 file · python Explain with highlit

Proxy models create different Python behavior for the same database table. I set proxy = True in Meta. This adds methods or changes default ordering without new tables. Proxy models share the same table as the original. Use cases include different manager methods, custom string representations, or model-specific admin interfaces. Unlike multi-table inheritance, there's no JOIN overhead. I use proxies for read-only variants or role-specific model APIs. This keeps code organized without database complexity.


Related snips

python
import os
import stat

for root, _dirs, files in os.walk('/etc'):
    for name in files:
        path = os.path.join(root, name)

Python security audit script for exposed risky filesystem state

python auditing host-security
by Kai Nakamura 1 tab
python
class Product(models.Model):
    name = models.CharField(max_length=200)
    slug = models.SlugField(blank=True)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    cost = models.DecimalField(max_digits=10, decimal_places=2)
    margin = models.DecimalField(max_digits=5, decimal_places=2, blank=True)

Django model signals vs overriding save

django python models
by Priya Sharma 2 tabs
python
from django.urls import path
from . import views

app_name = 'blog'

urlpatterns = [

Django URL namespacing and reverse lookups

django python urls
by Priya Sharma 3 tabs
python
import graphene
from graphene_django import DjangoObjectType
from blog.models import Post, Comment


class PostType(DjangoObjectType):

Django GraphQL with Graphene

django python graphql
by Priya Sharma 2 tabs
python
from django.db.models import Count, Avg, Sum, Q, F
from django.views.generic import TemplateView
from products.models import Product, Order, OrderItem


class DashboardView(TemplateView):

Django aggregation with annotate for statistics

django python database
by Priya Sharma 1 tab
python
from rest_framework import permissions


class IsOwner(permissions.BasePermission):
    """Allow only object owner to access."""

Django REST Framework permissions and authorization

django python rest
by Priya Sharma 2 tabs

Share this code

Here's the card — post it anywhere.

Django model inheritance with proxy models — share card
Link copied