首页 文章

Django:请帮助,我得到“is_valid()缺少1个必要的位置参数:'self'”......下面是代码块...谢谢

提问于
浏览
1
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

    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})

请使用django版本:1.11.10和python版本:3.6.2 . 以下是追溯

追溯:

内部41中的文件“C:\ Users \ TOCHIE \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ core \ handlers \ exception.py”response = get_response(request)File“C:用户\ TOCHIE \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ core \ handlers \ base.py“in _get_response 187. response = self.process_exception_by_middleware(e,request)File”C:\用户\ TOCHIE \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ core \ handlers \ base.py“in _get_response 185. response = wrapped_callback(request,* callback_args,** callback_kwargs)File”C :\ Copyright \ TOCHIE \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ django \ views \ generic \ base.py“在视图68中 . 返回self.dispatch(request,* args,** kwargs)在调度114中文件“C:\ Users \ TOCHIE \ PycharmProjects \ virtual_django \ env \ e_learning \ educa \ courses \ views.py” . 返回super(ContentCreateUpdateView,self).dispatch(request,module_id,model_name,id)文件“C :\用户\ TOCHIE \应用程序数据\本地\程序\ Python的\ Python36 \ LIB \站点包\ django \ views \ generic \ base.py“在dispatch 88中 . 返回处理程序(request,* args,** kwargs)文件”C:\ Users \ TOCHIE \ PycharmProjects \ virtual_django \ env \ e_learning \ educa \ courses \ views . py“在post 122. if form.is_valid():Exception Type:TypeError at / course / module / 4 / content / image / create / Exception值:is_valid()缺少1个必需的位置参数:'self'

1 回答

  • 2

    您在 get_form 中使用的modelform_factory返回 ModelForm 类,您应该在调用 is_valid 之前实例化它:

    Form = self.get_form(self.model)
    form = Form(instance=self.obj, data=request.POST, files=request.FILES)
    if form.is_valid():
        obj = form.save(commit=False)
    

相关问题