class user_lock(type): @staticmethod def queryset(self, request): qs = super(self.__class__, self).queryset(request) if request.user.is_superuser: return qs return qs.filter(**{self.__target__:request.user}) def __new__(self, name, bases, dic): dic['queryset'] = self.queryset return type(name, bases, dic) class MyAdmin (ModelAdmin): __metaclass__ = user_lock __target__ = 'user'