# models.py from django.db import models class Entry(models.Model): title = models.CharField(max_length=255) body = models.TextField() created = models.DateTimeField(auto_now_add = True) author = models.ForeignKey('auth.User') def __unicode__(self): return self.title class Meta: verbose_name_plural = 'entries' # admin.py from django.contrib import admin from models import Entry class EntryAdmin(admin.ModelAdmin): list_display = ('title', 'created', 'author') list_filter = ('author',) exclude = ['author'] def queryset(self, request): qs = super(EntryAdmin, self).queryset(request) if request.user.is_superuser: return qs else: return qs.filter(author = request.user) def save_model(self, request, obj, form, change): obj.author = request.user obj.save() def has_change_permission(self, request, obj=None): if not obj: return True # So they can see the change list page if request.user.is_superuser or obj.author == request.user: return True else: return False has_delete_permission = has_change_permission admin.site.register(Entry, EntryAdmin)