Почему IndexError в / list index вне диапазона в Django - PullRequest
1 голос
/ 05 июля 2019

Я не знаю, почему так происходит с этим кодом, я начинающий Python, исходный код в https://github.com/yo-alan/horarios

IndexError at /
list index out of range
Request Method: GET
Request URL:    http://127.0.0.1:8000/
Django Version: 1.11.22
Exception Type: IndexError
Exception Value:    
list index out of range
Exception Location: /Users/oscarfrancisco/PycharmProjects/ProyectosGithub/horarios-master/calendario/views.py in index, line 76
Python Executable:  /Users/oscarfrancisco/PycharmProjects/ProyectosGithub/bin/python
Python Version: 2.7.10
Python Path:    
['/Users/oscarfrancisco/PycharmProjects/ProyectosGithub/horarios-master',
 '/Users/oscarfrancisco/PycharmProjects/ProyectosGithub/lib/python27.zip',
 '/Users/oscarfrancisco/PycharmProjects/ProyectosGithub/lib/python2.7',
 '/Users/oscarfrancisco/PycharmProjects/ProyectosGithub/lib/python2.7/plat-darwin',
 '/Users/oscarfrancisco/PycharmProjects/ProyectosGithub/lib/python2.7/plat-mac',
 '/Users/oscarfrancisco/PycharmProjects/ProyectosGithub/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Users/oscarfrancisco/PycharmProjects/ProyectosGithub/lib/python2.7/lib-tk',
 '/Users/oscarfrancisco/PycharmProjects/ProyectosGithub/lib/python2.7/lib-old',
 '/Users/oscarfrancisco/PycharmProjects/ProyectosGithub/lib/python2.7/lib-dynload',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
 '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Users/oscarfrancisco/PycharmProjects/ProyectosGithub/lib/python2.7/site-packages']
Server time:    Jue, 4 Jul 2019 20:02:39 -0300

Это мой код:

def index(request):

    if not request.user.is_authenticated():
        return render(request, 'calendario/index.html')

    if str(list(request.user.groups.all())[0]) == 'Profesionales':

        persona = request.user.usuario.persona

        especialidades = Especialidad.objects.filter(estado='ON', profesional=persona)\
                                                .order_by('nombre')
        espacios = Espacio.objects.filter(~Q(estado=Espacio.OFF))
        calendarios = Calendario.objects.all()

        context = { "espacios": espacios, "especialidades": especialidades,
                    "calendarios": calendarios}

    else:

        institucion = request.user.usuario.instituciones.all()[0]

        especialidades = Especialidad.objects.filter(estado='ON', institucion=institucion)\
                                                .order_by('nombre')
        espacios = Espacio.objects.filter(~Q(estado=Espacio.OFF), institucion=institucion)

        calendarios = Calendario.objects.all()

        for calendario in calendarios[:]:
            if institucion != calendario.espacio.institucion:
                calendarios.remove(calendario)

        profesionales = Profesional.objects.filter(estado="ON")

        for profesional in profesionales[:]:

            usuario = Usuario.objects.get(persona=profesional)

            if institucion not in usuario.instituciones.all():
                profesionales.remove(profesional)

        context = { "espacios": espacios, "especialidades": especialidades,
                    "profesionales": profesionales, "calendarios": calendarios}

    #~ try:
        #~ usuario = Usuario.objects.get(user=request.user)
    #~ except:
        #~ usuario = request.user

    return render(request, 'calendario/home.html', context)

1 Ответ

0 голосов
/ 05 июля 2019

Строка 76 следующая:

if str(list(request.user.groups.all())[0]) == 'Profesionales':

и это означает, что пользователь не имеет никакой связанной группы - результаты .all() являются пустым списком и в нем нет первого (индекс 0) элемента.

Измените эту строку на следующие два:

groups = request.user.groups.all()
if len(groups) > 0 and str(groups[0]) == 'Profesionales':
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...