声明与导入的类相同的变量时"Local variable referenced before assignment"错误


local variable 'Document' referenced before assignment

我一直在获取此变量未结合的错误,但我似乎不明白为什么。

导入看起来不错。我正在使用django 1-10

from django.shortcuts import render
# Create your views here.
from forms import DocumentForm
from models import Document
def SaveDocument(request):
    saved = False
    if request.method == "POST":
        #Get the posted form
        MyDocumentForm = DocumentForm(request.POST, request.FILES)
        if MyDocumentForm.is_valid():
            print 'It enters here'
            Document = Document()
            Document.name = MyDocumentForm.cleaned_data["name"]
            Document.document = MyDocumentForm.cleaned_data["document"]
            Document.save()
            saved = True
        else:
            print 'Fails'
    else:
        MyDocumentForm = DocumentForm()
    return render(request, 'saved.html', locals())

问题是您只需在savedocument()函数中重新定义文档即可。只需将本地变量重命名为document而不是Document

document = Document()

当Python解析函数定义的主体并遇到诸如

之类的分配时
foo = ...

python默认情况下将foo解释为本地变量。

因此,当您提到:

Document = Document()

您导入的Document在您的SaveDocument()功能中不再访问。为了进行这项工作,请将其更改为:

document = Document()

并在其余代码中使用document的推荐。

您可以通过告诉Python使用Document global参考(这将使您执行当前代码) as:

global Document 
Document = Document()  
# NOTE: Do not use this in actual code. It is bad practice to 
# override the imported modules, class, function with the variable names

根据Python的global语句文档:

全局语句是一项声明,可为整个当前代码块。这意味着列出的标识符应被解释为全球群体。没有全局,尽管免费变量可能是指无需宣布全局的全球变量,但不可能分配给全球变量。

相关内容

最新更新