如何在Django 1.8.6中解决IndexError

时间:2018-07-09 18:32:25

标签: django

我的应用程序中出现列表索引超出范围错误。这是一个电子学习系统,当学生尝试注册课程时会发生错误。我正在使用Django 1.8.6。这是我的错误。

IndexError at /students/course/12/
list index out of range
    Request Method: GET
    Request URL:    http://127.0.0.1:8000/students/course/12/
    Django Version: 1.8.6
    Exception Type: IndexError
    Exception Value: list index out of range
    Exception Location: D:\DjangoSchoolProject\env\educa\lib\site- 
    packages\django\db\models\query.py in __getitem__, line 201
    Python Executable:  D:\DjangoSchoolProject\env\educa\Scripts\python.exe
    Python Version: 3.6.5
    Python Path:    
              ['D:\\DjangoSchoolProject\\educa',
              'D:\\DjangoSchoolProject\\env\\educa\\Scripts\\python36.zip',
              'D:\\DjangoSchoolProject\\env\\educa\\DLLs',
              'D:\\DjangoSchoolProject\\env\\educa\\lib',
              'D:\\DjangoSchoolProject\\env\\educa\\Scripts',           
          'c:\\users\\greendelta\\appdata\\local\\programs\\python\\python36- 
              32\\Lib',
          'c:\\users\\greendelta\\appdata\\local\\programs\\python\\python36- 
               32\\DLLs',
              'D:\\DjangoSchoolProject\\env\\educa',
               'D:\\DjangoSchoolProject\\env\\educa\\lib\\site-packages']

这是我用来招生的python文件。 从Django导入表格 从courses.models导入课程中

class CourseEnrollForm(forms.Form):
    course = forms.ModelChoiceField(queryset=Course.objects.all(),
                                widget=forms.HiddenInput)

任何帮助将不胜感激。我还在下面添加了view.py文件

这是我的view.py文件。

from django.core.urlresolvers import reverse_lazy
from django.shortcuts import get_object_or_404, redirect
from django.views.generic.base import TemplateResponseMixin, View
from django.views.generic.list import ListView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.views.generic.detail import DetailView
from django.forms.models import modelform_factory
from django.db.models import Count
from django.apps import apps
from django.core.cache import cache
 from braces.views import LoginRequiredMixin, PermissionRequiredMixin, \
                     CsrfExemptMixin, JsonRequestResponseMixin
from students.forms import CourseEnrollForm
from .models import Subject, Course, Module, Content
from .forms import ModuleFormSet


class OwnerMixin(object):
    def get_queryset(self):
        qs = super(OwnerMixin, self).get_queryset()
        return qs.filter(owner=self.request.user)


class OwnerEditMixin(object):
    def form_valid(self, form):
        form.instance.owner = self.request.user
        return super(OwnerEditMixin, self).form_valid(form)


 class OwnerCourseMixin(OwnerMixin, LoginRequiredMixin):
     model = Course


 class OwnerCourseEditMixin(OwnerCourseMixin, OwnerEditMixin):
     fields = ['subject', 'title', 'slug', 'overview']
     success_url = reverse_lazy('manage_course_list')
     template_name = 'courses/manage/course/form.html'


 class ManageCourseListView(OwnerCourseMixin, ListView):
     template_name = 'courses/manage/course/list.html'


 class CourseCreateView(PermissionRequiredMixin,
                   OwnerCourseEditMixin,
                   CreateView):
    permission_required = 'courses.add_course'


class CourseUpdateView(PermissionRequiredMixin,
                   OwnerCourseEditMixin,
                   UpdateView):
    permission_required = 'courses.change_course'


class CourseDeleteView(PermissionRequiredMixin,
                   OwnerCourseMixin,
                   DeleteView):
    success_url = reverse_lazy('manage_course_list')
    template_name = 'courses/manage/course/delete.html'
    permission_required = 'courses.delete_course'


class CourseModuleUpdateView(TemplateResponseMixin, View):
    template_name = 'courses/manage/module/formset.html'
    course = None

    def get_formset(self, data=None):
        return ModuleFormSet(instance=self.course,
                         data=data)

    def dispatch(self, request, pk):
        self.course = get_object_or_404(Course, id=pk, owner=request.user)
        return super(CourseModuleUpdateView, self).dispatch(request, pk)

    def get(self, request, *args, **kwargs):
         formset = self.get_formset()
        return self.render_to_response({'course': self.course,
                                    'formset': formset})

    def post(self, request, *args, **kwargs):
         formset = self.get_formset(data=request.POST)
        if formset.is_valid():
            formset.save()
            return redirect('manage_course_list')
        return self.render_to_response({'course': self.course,
                                    'formset': formset})


class ContentCreateUpdateView(TemplateResponseMixin, View):
     module = None
     model = None
      obj = None
    template_name = 'courses/manage/content/form.html'

    def get_model(self, model_name):
        if model_name in ['text', 'video', 'image', 'file']:
            return apps.get_model(app_label='courses', model_name=model_name)
        return None

    def get_form(self, model, *args, **kwargs):
         Form = modelform_factory(model,
                             exclude=['owner', 'order', 'created', 'updated'])
        return Form(*args, **kwargs)

    def dispatch(self, request, module_id, model_name, id=None):
        self.module = get_object_or_404(Module,
                                    id=module_id,
                                    course__owner=request.user)
        self.model = self.get_model(model_name)
        if id:
            self.obj = get_object_or_404(self.model,
                                     id=id,
                                     owner=request.user)
        return super(ContentCreateUpdateView,
                 self).dispatch(request, module_id, model_name, id)

    def get(self, request, module_id, model_name, id=None):
        form = self.get_form(self.model, instance=self.obj)
        return self.render_to_response({'form': form,
                                    'object': self.obj})

    def post(self, request, module_id, model_name, id=None):
        form = self.get_form(self.model,
                         instance=self.obj,
                         data=request.POST,
                         files=request.FILES)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.owner = request.user
            obj.save()
            if not id:
                # new content
                Content.objects.create(module=self.module,
                                   item=obj)
            return redirect('module_content_list', self.module.id)

        return self.render_to_response({'form': form,
                                    'object': self.obj})


class ContentDeleteView(View):

    def post(self, request, id):
        content = get_object_or_404(Content,
                                id=id,
                                module__course__owner=request.user)
        module = content.module
        content.item.delete()
        content.delete()
        return redirect('module_content_list', module.id)


class ModuleContentListView(TemplateResponseMixin, View):
    template_name = 'courses/manage/module/content_list.html'

    def get(self, request, module_id):
        module = get_object_or_404(Module,
                               id=module_id,
                               course__owner=request.user)

        return self.render_to_response({'module': module})


class ModuleOrderView(CsrfExemptMixin, JsonRequestResponseMixin, View):

    def post(self, request):
        for id, order in self.request_json.items():
            Module.objects.filter(id=id,
                              course__owner=request.user).update(order=order)
        return self.render_json_response({'saved': 'OK'})


 class ContentOrderView(CsrfExemptMixin, JsonRequestResponseMixin, View):

    def post(self, request):
        for id, order in self.request_json.items():
            Content.objects.filter(id=id,

module__course__owner=request.user).update(order=order)
        return self.render_json_response({'saved': 'OK'})


 class CourseListView(TemplateResponseMixin, View):
      model = Course
      template_name = 'courses/course/list.html'

     def get(self, request, subject=None):
         subjects = cache.get('all_subjects')
         if not subjects:
             subjects = Subject.objects.annotate(total_courses=Count('courses'))
             cache.set('all_subjects', subjects)
         all_courses = Course.objects.annotate(total_modules=Count('modules'))
        if subject:
            subject = get_object_or_404(Subject, slug=subject)
            key = 'subject_{}_courses'.format(subject.id)
            courses = cache.get(key)
            if not courses:
                courses = all_courses.filter(subject=subject)
                cache.set(key, courses)
        else:
            courses = cache.get('all_courses')
             if not courses:
                 courses = all_courses
                 cache.set('all_courses', courses)
        return self.render_to_response({'subjects': subjects,
                                    'subject': subject,
                                    'courses': courses})


 class CourseDetailView(DetailView):
     model = Course
     template_name = 'courses/course/detail.html'

     def get_context_data(self, **kwargs):
        context = super(CourseDetailView, self).get_context_data(**kwargs)
        context['enroll_form'] = CourseEnrollForm(initial={'course':self.object})
        return context

我仍然无法解决我的问题。

1 个答案:

答案 0 :(得分:0)

Kinda会在没有完整代码的情况下给出任何好的答案,请发布您的view.py即可呈现您的页面

当您尝试访问具有固定位置的数组而不检查是否存在或具有当前位置时,通常会发生这种情况

self.Whd

可能您尝试访问查询集或位置错误的任何数组