【问题标题】:Django - Exception Value: local variable 'form' referenced before assignmentDjango - 异常值:分配前引用的局部变量“表单”
【发布时间】:2019-05-01 12:35:09
【问题描述】:

在我得到堆栈的表单中保存搜索词的定义中。这个定义给出了错误“赋值前引用的局部变量'form'”。就行了(如果 form.is_valid():)。我试图重新排序,但没有成功。对于更有经验的开发人员来说,这可能很容易。

def SearchCreateView(request):
    template_name = 'SearchCreateView_form.html'
    model = Search
    form_class = SearchCreateViewForm

    if request.method == 'POST':
        if form.is_valid():
            form = SearchCreateViewForm(request.POST or None, instance=search.user)
            print(form.errors.as_text())
            search = form.save(commit=False)
            form.instance.search.user = self.request.search.user
            return render_to_response(request, 'search.html', {'form': form})
        else:
            context = {'form': form}
            return render_to_response(request, 'save.html', context)
    else:
        form = SearchCreateViewForm(request.POST or None)
        return render(request, 'SearchCreateView_form.html', {'form': form})

【问题讨论】:

  • 这是基于函数的视图,不是基于类的视图,所以不能使用self。在search = form.save(commit=False) 之后,只需执行search.user = self.request.user。最后你需要打电话给search.save()
  • 另外,不要使用render_to_response,它已经过时了。请改用render()

标签: django forms variable-assignment


【解决方案1】:

尝试添加这个来定义表单变量:

def SearchCreateView(request):
    template_name = 'SearchCreateView_form.html'
    model = Search
    form_class = SearchCreateViewForm

    form = form_class(request.POST or None)  # ADD THIS

    if request.method == 'POST':
        if form.is_valid():
            form = SearchCreateViewForm(request.POST or None, instance=request.user)
            print(form.errors.as_text())
            search = form.save(commit=False)
            form.instance.search.user = request.user
            return render_to_response(request, 'search.html', {'form': form})
        else:
            context = {'form': form}
            return render_to_response(request, 'save.html', context)
    else:
        form = SearchCreateViewForm(request.POST or None)
            return render(request, 'SearchCreateView_form.html', {'form': form})

【讨论】:

  • 感谢您的反应!两者都关注了,我不小心删除了 Mohit 的反应。对不起,莫希特。 ;(现在有另一个问题:无法分配“''”:“Search.user”必须是“User”实例。
  • @green 也许试试form.instance.search.user = self.request.user
  • @green 你不能删除其他用户的答案,Mohit 自己删除了答案。
  • @vyruss self.request.user 或 self.request.user.POST.get('user") 给出“WSGIRequest”对象没有属性“get”。这有什么关系吗? '是超级用户而不是以用户身份登录?
  • @green 抱歉,我是想说= request.user
猜你喜欢
  • 2019-10-10
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多