Index: base/functions.py
===================================================================
--- base/functions.py	(revision d923030aeb3654db4d34d72cb9843ee8da261c09)
+++ base/functions.py	(revision 3625c136060f3989c6d26e7806f53e281dbe23d3)
@@ -20,23 +20,4 @@
 import requests
 
-def cargar_tipo_pregunta():
-    """!
-    FunciÃ³n que permite cargar los tipos de preguntas que existen
-
-    @author Rodrigo Boet (rboet at cenditel.gob.ve)
-    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versiÃ³n 3 (GPLv3)</a>
-    @date 15-02-2017
-    @return Devuelve una tupla con los tipos de pregunta
-    """
-
-    lista = ('', 'Seleccione...'),
-
-    try:
-        for tipo_pregunta in TipoPregunta.objects.all():
-            lista += (tipo_pregunta.id, tipo_pregunta.tipo),
-    except Exception as e:
-        pass
-
-    return lista
 
 def cargar_entidad():
@@ -53,13 +34,14 @@
 
     try:
-        for entidad in Entidad.objects.all():
-            lista += (entidad.codigo, entidad.nombre),
-    except Exception as e:
-        pass
-
-    return lista
-
-
-def cargar_municipios():
+        entidades = requests.get(API_URL+'entidad/')
+        for entidad in entidades.json():
+            lista += (entidad['codigo'], entidad['nombre']),
+    except Exception as e:
+        pass
+
+    return lista
+
+
+def cargar_municipios(entidad = 0):
     """!
     FunciÃ³n que permite cargar todas los municipios
@@ -68,4 +50,5 @@
     @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versiÃ³n 3 (GPLv3)</a>
     @date 20-04-2017
+    @param entidad <b>{int}</b> Recibe el id del padre
     @return Devuelve una tupla con los municipios
     """
@@ -74,13 +57,15 @@
 
     try:
-        for municipio in Municipio.objects.all():
-            lista += (municipio.codigo, municipio.nombre),
-    except Exception as e:
-        pass
-
-    return lista
-
-
-def cargar_parroquias():
+        url = API_URL+'municipio/' if entidad ==0 else API_URL+'municipio/?estado='+str(entidad)
+        municipios = requests.get(url)
+        for municipio in municipios.json():
+            lista += (municipio['codigo'], municipio['nombre']),
+    except Exception as e:
+        pass
+
+    return lista
+
+
+def cargar_parroquias(municipio = 0):
     """!
     FunciÃ³n que permite cargar todas las parroquias
@@ -89,4 +74,5 @@
     @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versiÃ³n 3 (GPLv3)</a>
     @date 20-04-2017
+    @param municipio <b>{int}</b> Recibe el id del padre
     @return Devuelve una tupla con las parroquias
     """
@@ -95,6 +81,8 @@
 
     try:
-        for parroquia in Parroquia.objects.all():
-            lista += (parroquia.codigo, parroquia.nombre),
+        url = API_URL+'parroquia/' if municipio ==0 else API_URL+'parroquia/?municipio='+str(municipio)
+        parroquias = requests.get(url)
+        for parroquia in parroquias.json():
+            lista += (parroquia['codigo'], parroquia['nombre']),
     except Exception as e:
         pass
Index: base/templates/base.vars.javascript.html
===================================================================
--- base/templates/base.vars.javascript.html	(revision d923030aeb3654db4d34d72cb9843ee8da261c09)
+++ base/templates/base.vars.javascript.html	(revision 3625c136060f3989c6d26e7806f53e281dbe23d3)
@@ -1,6 +1,9 @@
 {% load static from staticfiles %}
 <script type="text/javascript">
-    // URL para actualizar el combo
-    var URL_ACTUALIZAR_COMBO = "{% url 'actualizar_combo' %}" ;
+    // URL para obtener municipios
+    var URL_BUSCAR_MUNICIPIO = "{% url 'buscar_municipio' %}" ;
+    
+    // URL para obtener parroquias
+    var URL_BUSCAR_PARROQUIA = "{% url 'buscar_parroquia' %}" ;
 
     // URL para participaciÃ³n
Index: base/urls.py
===================================================================
--- base/urls.py	(revision f29adf8a661bdc2d35d0e12356bf97478f2ef039)
+++ base/urls.py	(revision 3625c136060f3989c6d26e7806f53e281dbe23d3)
@@ -22,4 +22,5 @@
 ## Ajax
 urlpatterns +=[
-    url(r'^ajax/actualizar-combo/?$', actualizar_combo, name='actualizar_combo'),
+    url(r'^ajax/municipio/?$', buscar_municipio, name='buscar_municipio'),
+    url(r'^ajax/parroquia/?$', buscar_parroquia, name='buscar_parroquia'),
 ]
Index: base/views.py
===================================================================
--- base/views.py	(revision d923030aeb3654db4d34d72cb9843ee8da261c09)
+++ base/views.py	(revision 3625c136060f3989c6d26e7806f53e281dbe23d3)
@@ -14,8 +14,9 @@
 # @version 1.0
 from django.shortcuts import render
-from django.http import HttpResponse
+from django.http import JsonResponse
 from django.apps import apps
 from django.views.generic import TemplateView
 from django.contrib.auth.mixins import LoginRequiredMixin
+from base.functions import cargar_municipios, cargar_parroquias
 
 import json
@@ -33,66 +34,35 @@
 
 
-def actualizar_combo(request):
+def buscar_municipio(request):
     """!
-    FunciÃ³n que actualiza los datos de un select dependiente de los datos de otro select
+    FunciÃ³n buscar municipios (se puede filtrar por la entidad)
 
-    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
+    @author Rodrigo Boet (robet at cenditel.gob.ve)
     @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versiÃ³n 3 (GPLv3)</a>
-    @date 28-04-2016
+    @date 03-10-2017
     @param request <b>{object}</b> Objeto que contiene la peticiÃ³n
-    @return Devuelve un HttpResponse con el JSON correspondiente a los resultados de la consulta y los respectivos
-            elementos a cargar en el select
+    @return Devuelve un JsonResponse con los datos
     """
-    try:
-        if not request.is_ajax():
-            return HttpResponse(json.dumps({'resultado': False, 'error': str('La solicitud no es ajax')}))
+    entidad = request.GET.get('entidad',None)
+    if(entidad):
+        data = cargar_municipios(entidad)
+    else:
+        data = cargar_municipios()
+    return JsonResponse(data,safe=False)
 
-        ## Valor del campo que ejecuta la acciÃ³n
-        cod = request.GET.get('opcion', None)
+def buscar_parroquia(request):
+    """!
+    FunciÃ³n buscar parroquias (se puede filtrar por el municipio)
 
-        ## Nombre de la aplicaciÃ³n del modelo en donde buscar los datos
-        app = request.GET.get('app', None)
-
-        ## Nombre del modelo en el cual se va a buscar la informaciÃ³n a mostrar
-        mod = request.GET.get('mod', None)
-        
-        ## Atributo por el cual se va a filtrar la informaciÃ³n
-        campo = request.GET.get('campo', None)
-
-        ## Atributo del cual se va a obtener el valor a registrar en las opciones del combo resultante
-        n_value = request.GET.get('n_value', None)
-
-        ## Atributo del cual se va a obtener el texto a registrar en las opciones del combo resultante
-        n_text = request.GET.get('n_text', None)
-
-        ## Nombre de la base de datos en donde buscar la informaciÃ³n, si no se obtiene el valor por defecto es default
-        bd = request.GET.get('bd', 'default')
-
-        filtro = {}
-
-        if app and mod and campo and n_value and n_text and bd:
-            modelo = apps.get_model(app, mod)
-            
-            if cod:
-                filtro = {campo: cod}
-
-            out = "<option value=''>%s...</option>" % str("Seleccione")
-
-            combo_disabled = "false"
-
-            if cod != "" and cod != "0":
-                for o in modelo.objects.using(bd).filter(**filtro).order_by(n_text):
-                    out = "%s<option value='%s'>%s</option>" \
-                          % (out, str(o.__getattribute__(n_value)),
-                             o.__getattribute__(n_text))
-            else:
-                combo_disabled = "true"
-
-            return HttpResponse(json.dumps({'resultado': True, 'combo_disabled': combo_disabled, 'combo_html': out}))
-
-        else:
-            return HttpResponse(json.dumps({'resultado': False,
-                                            'error': str('No se ha especificado el registro')}))
-
-    except Exception as e:
-        return HttpResponse(json.dumps({'resultado': False, 'error': e}))
+    @author Rodrigo Boet (robet at cenditel.gob.ve)
+    @copyright <a href='https://www.gnu.org/licenses/gpl-3.0.en.html'>GNU Public License versiÃ³n 3 (GPLv3)</a>
+    @date 03-10-2017
+    @param request <b>{object}</b> Objeto que contiene la peticiÃ³n
+    @return Devuelve un JsonResponse con los datos
+    """
+    municipio = request.GET.get('municipio',None)
+    if(municipio):
+        data = cargar_parroquias(municipio)
+    else:
+        data = cargar_parroquias()
+    return JsonResponse(data,safe=False)
Index: static/js/funciones.js
===================================================================
--- static/js/funciones.js	(revision d923030aeb3654db4d34d72cb9843ee8da261c09)
+++ static/js/funciones.js	(revision 3625c136060f3989c6d26e7806f53e281dbe23d3)
@@ -1,492 +1,2 @@
-/**
- * FunciÃ³n para agregar preguntas en la consulta
- * @param element Recibe nombre de elemento a agregar
-**/
-function agregar_preguntas(element) {
-    $('#agregar_preguntas').append($(element).html());
-}
-
-/**
- * FunciÃ³n para eliminar preguntas agregadas dinÃ¡micamente
- * @param element Recibe el elemento a partir del cual se eliminarÃ¡ la fila
-**/
-function eliminar_preguntas(element) {
-    $(element).parent().parent().parent().remove();
-}
-
-/**
- * FunciÃ³n para validar las preguntas agregadas dinÃ¡micamente
- * @param event Recibe el evento click
-**/
-function validar_preguntas(event) {
-    var longitud = $('#agregar_preguntas').find('.row');
-    if(longitud.length>0)
-    {
-        var vacio = false;
-        $.each(longitud.find('input'),function(key,value){
-            if ($(value).val().trim()=='') {
-                vacio = true;
-            }
-        });
-        $.each(longitud.find('select'),function(key,value){
-            if ($(value).val().trim()=='') {
-                vacio = true;
-            }
-        });
-        if (vacio) {
-            event.preventDefault();
-            bootbox.dialog({
-                message: "Debe llenar todas las preguntas que agregÃ³",
-                title: "<b class='text-danger'>Error</b>",
-                buttons: {
-                    success: {
-                        label: "Cerrar",
-                        className: "btn-red",
-                        callback: function() {}
-                    }
-                }
-            });
-        }
-    }
-}
-
-/**
- * FunciÃ³n para cargar preguntas luego de un error en el formulario
-**/
-function cargar_preguntas() {
-    $.each(opciones,function(){
-        $('#agregar_preguntas').append($('#preguntas').html());    
-    });
-    $.each($('#agregar_preguntas #id_texto_pregunta_modal'),function(key,value){
-        $(value).val(opciones[key]['texto_pregunta']);
-    });
-    $.each($('#agregar_preguntas #id_tipo_pregunta_modal'),function(key,value){
-        $(value).val(opciones[key]['tipo_pregunta']).change();
-    });
-}
-
-/**
- * FunciÃ³n para agregar opciones si la pregunta lo requiere
- * @param element Recibe el elemento de la consulta
-**/
-function add_option(element) {
-    var option = $(element).parent().parent().parent().find('#for_options');
-    $(option).append($('#agregar_opciones').html());
-}
-
-/**
- * FunciÃ³n para agregar opciones si la pregunta lo requiere
- * @param element Recibe el id de la consulta
-**/
-function remove_option(element) {
-    $(element).parent().parent().parent().remove();
-}
-
-/**
- * FunciÃ³n para mostrar las preguntas de una consulta
- * @param id Recibe el id de la consulta
-**/
-function ver_preguntas(id) {
-    $.ajax({
-        type: 'GET',
-        url: "/administrador/consulta/ajax/pregunta-list/"+id,
-        success: function(response) {
-            if (response.success) {
-                var preguntas = response.preguntas;
-                var token = $('input').val();
-                var html = '<form action="" role="form" method="post" id="question_form">';
-                html += '<input type="hidden" name="csrfmiddlewaretoken" value="'+token+'">';
-                $.each(preguntas,function(key,value){
-                    html += "<h4>Pregunta #"+parseInt(key+1)+"</h4>";
-                    html+= $('#preguntas').html();
-                    html += "<hr>";
-                });
-                html += "</form>";
-                bootbox.dialog({
-                    message: html,
-                    title: "Preguntas",
-                    buttons: {
-                        success: {
-                            label: "Guardar",
-                            className: "btn-primary",
-                            callback: function() {
-                                update_question();
-                            }
-                        },
-                        close: {
-                            label: "Cerrar",
-                            className: "btn-red",
-                            callback: function() {}
-                        }
-                    }
-                });
-                $.each($('.bootbox-body #id_texto_pregunta_modal'),function(key,value){
-                    $(value).val(preguntas[key]['texto_pregunta']);
-                    $(value).append('<input type="hidden" name="texto_pregunta_id" value="'+preguntas[key]['id']+'">');
-                });
-                $.each($('.bootbox-body select'),function(key,value){
-                    $(value).val(preguntas[key]['tipo_pregunta']).change();
-                    if (preguntas[key]['tipo_pregunta']<=2) {
-                        var padre = $(value).parent().parent().parent().parent()
-                        var agregar_opciones = $(padre).find("#add_options");
-                        html = '<h5 class="text-success">Agregar opciÃ³n '
-                        html += '<a href="#" onclick="agregar_opcion('+preguntas[key]['id']+')">';
-                        html += '<span class="glyphicon glyphicon-plus text-success"></span></a></h5>';
-                        $(agregar_opciones).append(html);
-                        html = '<div class="col-sm-12"><h5 class="text-info">Ver opciones '
-                        html += '<a href="#" onclick="see_option('+preguntas[key]['id']+')">';
-                        html += '<span class="glyphicon glyphicon-plus text-info"></span></a></h5></div>';
-                        $(padre).append(html);
-                    }
-                });
-                $.each($('.bootbox-body h4 a'),function(key,value){
-                    $(value).attr('onclick','del_pregunta(this,'+preguntas[key]['id']+')');
-                });
-            }
-            else{
-                
-            }
-        },
-        error:function(error)
-        {
-            bootbox.alert("OcurriÃ³ un error inesperado");
-        }
-    });
-}
-
-/**
- * FunciÃ³n para abrir el formulario de opciones
- * @param id Recibe el id de la pregunta
-**/
-function agregar_opcion(id) {
-    bootbox.dialog({
-        message: $('#formulario').html(),
-        title: "Opciones",
-        buttons: {
-            success: {
-                label: "Guardar",
-                className: "btn-primary",
-                callback: function() {
-                    submitOption(this);
-                }
-            },
-            close: {
-                label: "Cerrar",
-                className: "btn-red",
-                callback: function() {}
-            }
-        }
-    });
-    $('#formulario_modal').append($('#agregar_opciones_base').html());
-    $('#formulario_modal').attr('action',id);
-}
-
-/**
- * FunciÃ³n para enviar el formulario de las opciones
-**/
-function submitOption(objecto) {
-    var form = $(objecto).find('form');
-    $.ajax({
-        data: $(form).serialize(), 
-        type: 'POST',
-        url: '/administrador/consulta/create-option/'+$(form).attr('action'),
-        success: function(response) {
-            if (response.code) {
-                bootbox.alert("Se crearon las opciones con Ã©xito");
-            }
-            else{
-                var errors = '';
-                $.each(response.errors,function(key,value){
-                    errors += key+" "+value+"<br>";
-                });
-                bootbox.alert(errors);
-            }
-        }
-    });
-}
-
-/**
- * FunciÃ³n para ver las opciones de un pregunta
- * @param id Recibe el id de la pregunta
-**/
-function see_option(id) {
-    $.ajax({
-    type: 'GET',
-    url: "/administrador/consulta/ajax/opciones-list/"+id,
-    success: function(response) {
-        if (response.success) {
-            var opciones = response.opciones;
-            var token = $('input').val();
-            var html = '<form action="" role="form" method="post" id="option_form">';
-            html += '<input type="hidden" name="csrfmiddlewaretoken" value="'+token+'">';
-            $.each(opciones,function(key,value){
-                html += "<h4>Opcion #"+parseInt(key+1)+"</h4>";
-                html+= $('#agregar_opciones').html();
-                html += "<hr>";
-            });
-            html+= '</form>';
-            bootbox.dialog({
-                message: html,
-                title: "Opciones",
-                buttons: {
-                    success: {
-                        label: "Guardar",
-                        className: "btn-primary",
-                        callback: function() {
-                            update_option(id);
-                        }
-                    },
-                    close: {
-                        label: "Cerrar",
-                        className: "btn-red",
-                        callback: function() {}
-                    }
-                }
-            });
-            $.each($('.bootbox-body #option_form #id_texto_opcion'),function(key,value){
-                $(value).val(opciones[key]['texto_opcion']);
-                $(value).append('<input type="hidden" name="texto_opcion_id" value="'+opciones[key]['id']+'">');
-            });
-            $.each($('.bootbox-body #option_form #opciones a'),function(key,value){
-                $(value).attr('onclick','del_option(this,'+opciones[key]['id']+')');
-            });
-            }
-        },
-        error:function(error)
-        {
-            bootbox.alert("OcurriÃ³ un error inesperado");
-        }
-    });
-}
-
-/**
- * FunciÃ³n para actualizar las opciones de un pregunta
- * @param id Recibe el id de la pregunta
-**/
-function update_option(id) {
-    var form = $("#option_form");
-    $.ajax({
-        data: $(form).serialize(), 
-        type: 'POST',
-        url: '/administrador/consulta/update-option',
-        success: function(response) {
-            if (response.code) {
-                bootbox.alert("Se actualizaron las opciones con Ã©xito");
-            }
-            else{
-                var errors = '';
-                $.each(response.errors,function(key,value){
-                    errors += key+" "+value+"<br>";
-                });
-                bootbox.alert(errors);
-            }
-        }
-    }); 
-}
-
-/**
- * FunciÃ³n para eliminar las opciones de un pregunta
- * @param id Recibe el id de la pregunta
-**/
-function del_option(element,id) {
-        bootbox.dialog({
-        message: "Â¿Desea borrar la opciÃ³n seleccionada?",
-        title: "Alerta",
-        buttons: {
-            success: {
-                label: "Si",
-                className: "btn-primary",
-                callback: function() {
-                    var token = $('input').val();
-                    $.ajax({
-                        data: {'csrfmiddlewaretoken':token},
-                        type: 'POST',
-                        url: '/administrador/consulta/delete-option/'+id,
-                        success: function(response) {
-                            if (response.success) {
-                                remove_option(element);
-                                bootbox.alert("Se eliminÃ³ la opciÃ³n con Ã©xito");
-                            }
-                            else {
-                                bootbox.alert(response.mensaje);
-                            }
-                        },
-                        error:function(error)
-                        {
-                            bootbox.alert("OcurriÃ³ un error inesperado");
-                        }
-                    }); 
-                }
-            },
-            close: {
-                label: "No",
-                className: "btn-red",
-                callback: function() {}
-            }
-        }
-    });
-}
-
-/**
- * FunciÃ³n para eliminar una pregunta
- * @param id Recibe el id de la pregunta
-**/
-function del_pregunta(element,id) {
-        bootbox.dialog({
-        message: "Â¿Desea borrar la pregunta seleccionada?",
-        title: "Alerta",
-        buttons: {
-            success: {
-                label: "Si",
-                className: "btn-primary",
-                callback: function() {
-                    var token = $('input').val();
-                    $.ajax({
-                        data: {'csrfmiddlewaretoken':token},
-                        type: 'POST',
-                        url: '/administrador/consulta/delete-question/'+id,
-                        success: function(response) {
-                            if (response.success) {
-                                remove_option(element);
-                                bootbox.alert("Se eliminÃ³ la pregunta con Ã©xito");
-                            }
-                            else {
-                                bootbox.alert(response.mensaje);
-                            }
-                        },
-                        error:function(error)
-                        {
-                            bootbox.alert("OcurriÃ³ un error inesperado");
-                        }
-                    }); 
-                }
-            },
-            close: {
-                label: "No",
-                className: "btn-red",
-                callback: function() {}
-            }
-        }
-    });
-}
-
-/**
- * FunciÃ³n para abrir el formulario de preguntas
- * @param id Recibe el id de la consulta
-**/
-function add_preguntas(id) {
-    var token = $('input').val();
-    var html = '<form action="" role="form" method="post" id="question_form">';
-    html += '<input type="hidden" name="csrfmiddlewaretoken" value="'+token+'">';
-    html += '<div class="content"><h5 class="text-success">Agregar Preguntas '
-    html += '<a href="#" onclick="agregar_preguntas(\'#preguntas_base\');">';
-    html += '<span class="glyphicon glyphicon-plus text-success"></span></a></h5></div>';
-    html += '<div id="agregar_preguntas">';
-    html += $('#preguntas_base').html();
-    html += '</div></form>';
-    bootbox.dialog({
-        message: html,
-        title: "Preguntas",
-        buttons: {
-            success: {
-                label: "Guardar",
-                className: "btn-primary submit-question",
-                callback: function() {
-                    var vacio = false;
-                    $.each($('.modal-body #id_texto_pregunta'),function(key,value){
-                        if ($(value).val().trim()=='') {
-                            vacio = true;
-                        }
-                    });
-                    $.each($('.modal-body #id_tipo_pregunta'),function(key,value){
-                        if ($(value).val().trim()=='') {
-                            vacio = true;
-                        }
-                    });
-                    if (vacio) {
-                        event.preventDefault();
-                        bootbox.dialog({
-                            message: "Debe llenar todas las preguntas que agregÃ³",
-                            title: "<b class='text-danger'>Error</b>",
-                            buttons: {
-                                success: {
-                                    label: "Cerrar",
-                                    className: "btn-red",
-                                    callback: function() {}
-                                }
-                            }
-                        });
-                    }
-                    else{
-                        create_question(id);
-                    }
-                }
-            },
-            close: {
-                label: "Cerrar",
-                className: "btn-red",
-                callback: function() {}
-            }
-        }
-    });
-}
-
-/**
- * FunciÃ³n para crear un pregunta
- * @param id Recibe el id de la consulta
-**/
-function create_question(id) {
-    var form = $("#question_form");
-    $.ajax({
-    type: 'POST',
-    data: $(form).serialize(),
-    url: "/administrador/consulta/create-question/"+id,
-    success: function(response) {
-        if (response.code) {
-            bootbox.alert("Se crearon/creÃ³ la(s) pregunta(s) con Ã©xito");
-        }
-        else{
-            var errors = '';
-            $.each(response.errors,function(key,value){
-                errors += key+" "+value+"<br>";
-            });
-            bootbox.alert(errors);
-        }
-    },
-        error:function(error)
-        {
-            bootbox.alert("OcurriÃ³ un error inesperado");
-        }
-    });
-}
-
-/**
- * FunciÃ³n para actualizar las preguntas de una consulta
-**/
-function update_question() {
-    var form = $("#question_form");
-    $.ajax({
-        data: $(form).serialize(), 
-        type: 'POST',
-        url: '/administrador/consulta/update-question',
-        success: function(response) {
-            if (response.code) {
-                bootbox.alert("Se actualizaron las preguntas con Ã©xito");
-            }
-            else{
-                var errors = '';
-                $.each(response.errors,function(key,value){
-                    errors += key+" "+value+"<br>";
-                });
-                bootbox.alert(errors);
-            }
-        },
-        error:function(error)
-        {
-            bootbox.alert("OcurriÃ³ un error inesperado");
-        }
-    }); 
-}
-
 /**
  * FunciÃ³n para enviar los respuestas de la encuesta
@@ -552,5 +62,8 @@
         })
     .fail(function(response){
-        bootbox.alert("OcurriÃ³ un error inesperado");
+        MaterialDialog.alert("OcurriÃ³ un error inesperado",{
+            'title':"Error",
+            'buttons':{'close':{'text':'cerrar'}}
+        });
     });
 }
@@ -652,2 +165,71 @@
     $(obj).val($(obj).val().replace("  ",""));
 }
+
+/**
+ * @brief FunciÃ³n buscar los datos del municipio
+ * @param valor Recibe el valor del select
+ */
+function get_municipio(valor) {
+    if (valor!='') {
+        var url = URL_BUSCAR_MUNICIPIO+'?entidad='+valor;
+    }
+    else{
+        var url = URL_BUSCAR_MUNICIPIO;
+        $('#id_municipio').attr('disabled',true);
+        $('#id_municipio').material_select();
+    }
+    $.get(url)
+        .done(function(response){
+            $('#id_municipio').removeAttr('disabled');
+            var html = json2html_select(response);
+            $('#id_municipio').html(html);
+            $('#id_municipio').material_select();
+        })
+        .fail(function(response){
+            MaterialDialog.alert("OcurriÃ³ un error inesperado",{
+                'title':"Error",
+                'buttons':{'close':{'text':'cerrar'}}
+            });
+        });
+}
+
+/**
+ * @brief FunciÃ³n buscar los datos de la parroquia
+ * @param valor Recibe el valor del select
+ */
+function get_parroquia(valor) {
+    if (valor!='') {
+        var url = URL_BUSCAR_PARROQUIA+'?municipio='+valor;
+    }
+    else{
+        var url = URL_BUSCAR_PARROQUIA;
+        $('#id_parroquia').attr('disabled',true);
+        $('#id_parroquia').material_select();
+    }
+    $.get(url)
+        .done(function(response){
+            $('#id_parroquia').removeAttr('disabled');
+            var html = json2html_select(response);
+            $('#id_parroquia').html(html);
+            $('#id_parroquia').material_select();
+        })
+        .fail(function(response){
+            MaterialDialog.alert("OcurriÃ³ un error inesperado",{
+                'title':"Error",
+                'buttons':{'close':{'text':'cerrar'}}
+            });
+        });
+}
+
+/**
+ * @brief FunciÃ³n para convertir el json del select en el html correspondiente
+ * @param data Recibe los valores en formato JSON
+ * @return html Retorna los datos transformados en HTML
+ */
+function json2html_select(data) {
+    var html = '';
+    $.each(data,function(key,value){
+        html += '<option value="'+value[0]+'">'+value[1]+'</option>';
+    });
+    return html;
+}
Index: users/forms.py
===================================================================
--- users/forms.py	(revision d923030aeb3654db4d34d72cb9843ee8da261c09)
+++ users/forms.py	(revision 3625c136060f3989c6d26e7806f53e281dbe23d3)
@@ -124,13 +124,10 @@
         if 'estado' in self.data and self.data['estado']:
             self.fields['municipio'].widget.attrs.pop('disabled')
-            self.fields['municipio'].queryset=Municipio.objects.filter(entidad=self.data['estado'])
+            self.fields['municipio'].queryset = cargar_municipios(self.data['estado'])
 
             # Si se ha seleccionado un municipio establece el listado de parroquias y elimina el atributo disable
             if 'municipio' in self.data and self.data['municipio']:
                 self.fields['parroquia'].widget.attrs.pop('disabled')
-                self.fields['parroquia'].queryset=Parroquia.objects.filter(municipio=self.data['municipio'])
-        
-        if 'participacion' in self.data and self.data['participacion']=='CO':
-            self.fields['colectivo'].widget.attrs.pop('readonly')
+                self.fields['parroquia'].queryset = cargar_parroquias(self.data['municipio'])
         
         self.fields['estado'].choices = cargar_entidad()
@@ -178,17 +175,12 @@
     cedula = CedulaField()
     
-    ## sector
-    sector = forms.ChoiceField(
-        widget=forms.Select(attrs={'class': 'form-control input-md','onchange':'mostrar_sector(this.value);'}),
-        label="Sector",choices=(('','Seleccione...'),)+SECTORES
-        )
     
     ## estado
     estado = forms.ChoiceField(widget=forms.Select(attrs={'class': 'form-control input-md',
-        'onchange': "actualizar_combo(this.value,'base','Municipio','entidad','codigo','nombre','id_municipio')"}))
+        'onchange': "get_municipio(this.value)"}))
     
     ## municipio
     municipio = forms.ChoiceField(widget=forms.Select(attrs={'class': 'form-control input-md','disabled':'disabled',
-        'onchange': "actualizar_combo(this.value,'base','Parroquia','municipio','codigo','nombre','id_parroquia')"}))
+        'onchange': "get_parroquia(this.value)"}))
     
     ## parroquia
@@ -242,39 +234,5 @@
         if(validate_email(email)):
             raise forms.ValidationError("El correo ingresado ya existe")
-        return email
-    
-    
-    def clean_sector_trabajador(self):
-        """!
-        MÃ©todo que valida el sector trabajador
-    
-        @author Rodrigo Boet (rboet at cenditel.gob.ve)
-        @copyright GNU/GPLv2
-        @date 24-05-2017
-        @param self <b>{object}</b> Objeto que instancia la clase
-        @return Retorna el campo con la validacion
-        """
-        sector = self.cleaned_data['sector']
-        sector_trabajador = self.cleaned_data['sector_trabajador']
-        if(sector=='TR' and sector_trabajador==''):
-            raise forms.ValidationError("Debe ingresar el sector dÃ³nde trabaja")
-        return sector_trabajador
-    
-    def clean_sector_estudiante(self):
-        """!
-        MÃ©todo que valida el sector estudiante
-    
-        @author Rodrigo Boet (rboet at cenditel.gob.ve)
-        @copyright GNU/GPLv2
-        @date 24-05-2017
-        @param self <b>{object}</b> Objeto que instancia la clase
-        @return Retorna el campo con la validacion
-        """
-        sector = self.cleaned_data['sector']
-        sector_estudiante = self.cleaned_data['sector_estudiante']
-        if(sector=='ES' and sector_estudiante==''):
-            raise forms.ValidationError("Debe ingresar el sector dÃ³nde estudia")
-        return sector_estudiante
-        
+        return email        
         
     class Meta:
Index: users/views.py
===================================================================
--- users/views.py	(revision 810b14971eaa56bb33da3f63956be9911d220b9b)
+++ users/views.py	(revision 3625c136060f3989c6d26e7806f53e281dbe23d3)
@@ -102,5 +102,4 @@
     success_url = reverse_lazy('login')
     success_message = "Se registrÃ³ con Ã©xito"
-    model = User
 
     def form_valid(self, form, **kwargs):
