Python 在django中创建配置文件更新时出错
我试图在django应用程序中创建配置文件更新,但在浏览器中出现以下错误Python 在django中创建配置文件更新时出错,python,django,django-forms,Python,Django,Django Forms,我试图在django应用程序中创建配置文件更新,但在浏览器中出现以下错误 local variable 'form' referenced before assignment 任何帮助都将不胜感激。我现在很困惑。下面是我的观点.py。谢谢 View.py def update_profile(request): if request.method == 'POST': form = UpdateProfile(request.POST or None, instance
local variable 'form' referenced before assignment
任何帮助都将不胜感激。我现在很困惑。下面是我的观点.py。谢谢
View.py
def update_profile(request):
if request.method == 'POST':
form = UpdateProfile(request.POST or None, instance=request.user)
profile_form = ProfileEditForm(data = request.POST or None,instance=request.user,files=request.FILES)
if form.is_valid() and profile_form.is_valid():
form.save()
profile_form.save()
return redirect('profiles')
else:
form = UpdateProfile(instance=request.user)
profile_form = ProfileEditForm(instance=request.user)
context = {
"form": form,
"profile_form": profile_form,
}
template = 'edit.html'
return render(request, template, context)
class UpdateProfile(forms.ModelForm):
username = forms.CharField(required=True)
email = forms.EmailField(required=True)
first_name = forms.CharField(required=False)
last_name = forms.CharField(required=False)
class Meta:
model = User
fields = ['first_name', 'last_name', 'username', 'email']
class ProfileEditForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('date_of_birth', 'photo')
错误跟踪
Traceback:
File "/Users/Olar/Desktop/arbithub/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner
41. response = get_response(request)
File "/Users/Olar/Desktop/arbithub/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/Users/Olar/Desktop/arbithub/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/Olar/Desktop/arbithub/lib/python2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
23. return view_func(request, *args, **kwargs)
File "/Users/Olar/Desktop/arbithub/src/profiles/views.py" in update_profile
49. if form.is_valid() and profile_form.is_valid():
Exception Type: UnboundLocalError at /profile/edit/
Exception Value: local variable 'form' referenced before assignment
form.py
def update_profile(request):
if request.method == 'POST':
form = UpdateProfile(request.POST or None, instance=request.user)
profile_form = ProfileEditForm(data = request.POST or None,instance=request.user,files=request.FILES)
if form.is_valid() and profile_form.is_valid():
form.save()
profile_form.save()
return redirect('profiles')
else:
form = UpdateProfile(instance=request.user)
profile_form = ProfileEditForm(instance=request.user)
context = {
"form": form,
"profile_form": profile_form,
}
template = 'edit.html'
return render(request, template, context)
class UpdateProfile(forms.ModelForm):
username = forms.CharField(required=True)
email = forms.EmailField(required=True)
first_name = forms.CharField(required=False)
last_name = forms.CharField(required=False)
class Meta:
model = User
fields = ['first_name', 'last_name', 'username', 'email']
class ProfileEditForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('date_of_birth', 'photo')
将根据请求提供其他代码。尝试以下操作:
def update_profile(request):
form = UpdateProfile()
if request.method == 'POST':
form = UpdateProfile(data = request.POST or None, instance=request.user)
profile_form = ProfileEditForm(data = request.POST or None,instance=request.user,files=request.FILES)
if form.is_valid() and profile_form.is_valid():
form.save()
profile_form.save()
return redirect('profiles')
else:
form = UpdateProfile(instance=request.user)
profile_form = ProfileEditForm(instance=request.user)
context = {
"form": form,
"profile_form": profile_form,
}
template = 'edit.html'
return render(request, template, context)
试试这个:
def update_profile(request):
form = UpdateProfile()
if request.method == 'POST':
form = UpdateProfile(data = request.POST or None, instance=request.user)
profile_form = ProfileEditForm(data = request.POST or None,instance=request.user,files=request.FILES)
if form.is_valid() and profile_form.is_valid():
form.save()
profile_form.save()
return redirect('profiles')
else:
form = UpdateProfile(instance=request.user)
profile_form = ProfileEditForm(instance=request.user)
context = {
"form": form,
"profile_form": profile_form,
}
template = 'edit.html'
return render(request, template, context)
请添加完整错误trace@Navid2zp我需要它。@BearBrown添加了错误traceIs这个缩进是否与运行代码的缩进相同?特别注意内部
如果。是相同的缩进请添加完整错误trace@Navid2zp我需要它。@BearBrown添加了错误traceIs这个缩进是否与运行代码的缩进相同?请特别注意内部if
。是相同的缩进错误`'NoneType'对象没有属性'is\u valid'`它现在可以工作,但配置文件表单不显示在浏览器上尝试添加打印(配置文件表单)
beforereturn
语句,检查终端是否分配了变量。@可能是缩进有问题,即使看起来不像。获取一个'NoneType'对象没有属性“is\u valid”
错误表明前两个if
没有按其应该的方式嵌套。就我所见,您的原始代码应该运行时不会出现赋值前引用变量的错误,因为form
是在两条路径上创建的(if
和else
).error`'NoneType'对象没有属性'is\u valid'`它现在可以工作,但是配置文件表单没有显示在浏览器上。请尝试在return
语句之前添加print(profile\u form)
,以检查终端是否分配了变量。@King缩进可能有问题,即使看起来不像。获取一个'NoneType'对象没有属性“is\u valid”
错误表明前两个if
没有按其应该的方式嵌套。就我所见,您的原始代码应该运行时不会出现赋值前引用变量的错误,因为form
是在两个路径上创建的(if
和else
)。