Python Django中的名称错误-视图中的嵌套函数-保存到数据库

Python Django中的名称错误-视图中的嵌套函数-保存到数据库,python,django,function,nested,nested-function,Python,Django,Function,Nested,Nested Function,使用Django,当试图将用户的答案保存到数据库时,它向我显示了一个名称错误。我在views函数中嵌套了一个函数,当我不尝试将数据保存到数据库时,它可以正常工作。但是,一旦我尝试在views函数中插入代码来保存数据,就会产生这个名称错误。下面是包含代码的文件 models.py文件 from django.db import models from django.utils import timezone from django.contrib.auth.models import User

使用Django,当试图将用户的答案保存到数据库时,它向我显示了一个名称错误。我在views函数中嵌套了一个函数,当我不尝试将数据保存到数据库时,它可以正常工作。但是,一旦我尝试在views函数中插入代码来保存数据,就会产生这个名称错误。下面是包含代码的文件

models.py文件

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User 

class ansquestions(models.Model):
    m_invested = models.CharField(max_length=100)
    p_return = models.CharField(max_length=100)
    years = models.CharField(max_length=100)
    inflation_yes_no = models.CharField(max_length=100)
    r_output = models.TextField(default=True)
    date_answered = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
from django import forms
from .models import ansquestions

class ansquestionsForm(forms.ModelForm):
    class Meta:
        model = ansquestions
        fields = ['m_invested', 'p_return', 'years', 'inflation_yes_no', 'r_output', 'date_answered', 'author'

]
forms.py文件

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User 

class ansquestions(models.Model):
    m_invested = models.CharField(max_length=100)
    p_return = models.CharField(max_length=100)
    years = models.CharField(max_length=100)
    inflation_yes_no = models.CharField(max_length=100)
    r_output = models.TextField(default=True)
    date_answered = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
from django import forms
from .models import ansquestions

class ansquestionsForm(forms.ModelForm):
    class Meta:
        model = ansquestions
        fields = ['m_invested', 'p_return', 'years', 'inflation_yes_no', 'r_output', 'date_answered', 'author'

]
views.py文件(注意:fvinvestment函数嵌套在investmentfvcalc函数下。在此处粘贴时,fvinvestment函数不会显示为在investmentfvcalc下缩进,但在我的实际代码中,fvinvestment函数缩进并嵌套在InvestmentMetnCalc函数下。)

从django.exe导入渲染
#从django.http导入HttpResponse
从。模型导入问题
from.forms导入问题表单
def投资Fv(请求):
idata={'tmi':tmi'pry':pry'ys':ys'qinf':qinf}
返回呈现(请求'fvalueapp/investmentfv.html',idata)
def投资FvCalc(请求):
如果request.method==“POST”:
表单=ansquestionsForm(request.POST)
如果form.is_有效():
total_i=request.POST.get[“m_invested”,“”]
perc_r=request.POST.get[“p_return”,“”]
年=请求.发布.获取[“年”,'']
补偿=请求.发布.获取[“通货膨胀”\u是\u否],“”]
回答问题=回答问题(m\u投资=总投资,p\u回报=百分比,年数=年数,通货膨胀是否=构成信息)
回答问题(obj.save)
def fvinvestment():
全局fv_i_值
全局r_输出
#全局补足infl(上述技术可能需要全局变量。因为错误表明补足inf未定义)
如果补充信息==‘否’:
i_返回=(浮动(perc_r))
elif composement_infl==‘是’和int(years_i)5和int(years_i)=10:
i_返回=(6+浮动(perc_r))
fv_i_值=int(总计)*(1+(收益)*.01)**int(一年)
r_输出='在这个时间段结束时,您的资金将增长到'+str(fv_i_值)+'美元的总和。'
Fv投资()
idata={'tmi':tmi,'pry':pry,'ys','qinf':qinf,'r_output':r_output}
返回呈现(请求'fvalueapp/fvinvestmentcalcresults.html',idata)
错误:


运行上述代码时,它会给我错误“NameError at investmentfv/InvestmentTFVCALC”“在封闭范围内的赋值之前引用的自由变量'Component_infl'”i,然后将变量“Component_infl”作为全局变量放入fvinvestment函数中,这将产生错误“名称错误-未定义名称‘补充信息’

将fvinvestment更改为全局范围,传入以下变量:年份和补充信息”

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User 

class ansquestions(models.Model):
    m_invested = models.CharField(max_length=100)
    p_return = models.CharField(max_length=100)
    years = models.CharField(max_length=100)
    inflation_yes_no = models.CharField(max_length=100)
    r_output = models.TextField(default=True)
    date_answered = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
from django import forms
from .models import ansquestions

class ansquestionsForm(forms.ModelForm):
    class Meta:
        model = ansquestions
        fields = ['m_invested', 'p_return', 'years', 'inflation_yes_no', 'r_output', 'date_answered', 'author'

]
def fvinvestment(years_i, makeup_infl):
    ....

这也将解决您的补偿infl not defined错误

您不应该在views.py中调用这样的函数并期望它工作。Django将web请求路由到一个视图函数。如果您想获得有关错误的更多详细信息,还应该复制有关NameError的完整回溯。更新:我忘记添加用于保存产生错误的数据的代码,现在就在上面了。@edgars也在运行上述代码,它会给我错误“NameError at investmentfv/InvestmentTFVCALC”“赋值前在封闭范围内引用的自由变量'compose_infl'”i than later将变量“compose_infl”作为全局变量放入fvinvestment函数中,它将产生错误“NameError-name'compose_infl'未定义重要:fvinvestment函数嵌套在investmentfvcalc函数下。在此处粘贴时,它不会在investmentfvcalc下显示为indeneted,但在我的实际代码中,fvinvestment函数缩进并嵌套在investmetncalc函数下。将视图函数嵌套在另一个视图函数中不符合django最佳实践,坦率地说,它导致范围错误一点也不奇怪。相反,完全分离视图,或者编写一个基于类的视图,并将嵌套视图中的逻辑放入其方法中。您好,谢谢您的回复。当您说将fvinvestment设置为全局范围时,您的意思是不将其用作嵌套函数,并取消fvinvestment函数的缩进,使其本身成为一个单独的函数吗?是的,这就是我的意思。嵌套视图函数在Django视图中不是很好的做法