class UserManager(models.Manager): def __init__(self, *args): try: self.fk_field_name = args[0] except IndexError: self.fk_field_name = None super(UserManager, self).__init__() def get_query_set(self): query_set = super(UserManager, self).get_query_set() if self.fk_field_name: current_user = get_current_user() if current_user and not current_user.is_superuser: return query_set.filter(**{ '%s__exact' % self.fk_field_name: current_user }) return query_set # Example usage class TestModel(models.Model): owner = models.ForeignKey('auth.user') objects = UserManager('owner')