Локальная переменная 'med' упоминается до присвоения - Django
У меня есть 2 модели 1) patientprofile и 2) medInfo. В первой модели patientprofile я пытаюсь получить информацию о пациенте (имя и другую личную информацию), а во второй модели я хочу добавить медицинскую информацию пациента. Когда я пытаюсь проверить, существует ли медицинская информация для пациента, то показываю и обновляю ее. в противном случае нужно создать и обновить ее. в модели medinfo используется ключ пациента (id). В панели администратора все работает отлично. но когда я пытаюсь сделать это в UI получаю ошибку.
ниже приведен код:view.py
@login_required
def medinfoupdate(request, patid):
# to get patient name and id in medinfo page accessing patientprofile data
patprofileedit = patientprofile.objects.get(id=patid)
try:
med = medInfo.objects.get(pat_ID=patid)
if request.method == 'GET':
form = medInfo_form(instance=med)
return render(request, 'pmp/medinfo.html', {'med': med, 'form':form, 'patprofileedit' : patprofileedit} )
except:
if request.method == 'GET':
return render(request, 'pmp/medinfo.html', {'patprofileedit' : patprofileedit} )
if request.method == 'POST':
try:
form = medInfo_form(request.POST, instance=med)
form.save()
return redirect(patientlist)
except ValueError:
return render(request, 'pmp/medinfo.html', {'form': form, 'error': 'Data entered is wrong!'})
ниже ошибка :
UnboundLocalError at /medinfo/pat-11
локальная переменная 'med' упоминается до присвоения
Метод запроса: POST
URL запроса: http://localhost:8000/medinfo/pat-11
Версия Django: 4.0.4
Тип исключения: UnboundLocalError
Значение исключения:
локальная переменная 'med' обратилась до присвоения
Местоположение исключения: E:\py\patient_management_project\pmp\views.py, строка 143, in medinfoupdate
Исполняемый файл Python: C:\Users\Lenovo\AppData\Local\Programs\Python\Python310\python.exe
Версия Python: 3.10.4
Python Path:
['E:\py\patient_management_project',
'C:\Users\Lenovo\AppData\Local\Programs\Python\Python310\python310.zip',
'C:\Users\Lenovo\AppData\Local\Programs\Python\Python310\DLLs',
'C:\Users\Lenovo\AppData\Local\Programs\Python\Python310\lib',
'C:\Users\Lenovo\AppData\Local\Programs\Python\Python310',
'C:\Users\Lenovo\AppData\Local\Programs\Python\Python310\lib\site-packages'].
Время сервера: Sun, 12 Jun 2022 08:05:07 +0000
Переместите поведение POST
туда, где на самом деле существует med
(и, пожалуйста, всегда добавляйте конкретное исключение к except
):
@login_required
def medinfoupdate(request, patid):
# to get patient name and id in medinfo page accessing patientprofile data
patprofileedit = patientprofile.objects.get(id=patid)
try:
med = medInfo.objects.get(pat_ID=patid)
if request.method == 'GET':
form = medInfo_form(instance=med)
return render(request, 'pmp/medinfo.html', {'med': med,
elif request.method == 'POST':
try:
form = medInfo_form(request.POST, instance=med)
form.save()
return redirect(patientlist)
except ValueError:
return render(request, 'pmp/medinfo.html', {'form': form, 'error': 'Data entered is wrong!'})'form':form, 'patprofileedit' : patprofileedit} )
except medInfo.DoesNotExist:
if request.method == 'GET':
return render(request, 'pmp/medinfo.html', {'patprofileedit' : patprofileedit} )
Я решил эту проблему. Он работал нормально, когда существовал pat_ID. но когда pat_ID отсутствовал, он показывал ошибку. Для этого я использовал следующий метод для передачи pat_ID из другой модели.
@login_required def medinfoupdate(request, patid):
# to get patient name and id in medinfo page accessing patientprofile data
patprofileedit = patientprofile.objects.get(id=patid)
try:
med = medInfo.objects.get(pat_ID=patid)
if request.method == 'GET':
form = medInfo_form(instance=med)
return render(request, 'pmp/medinfo.html', {'med': med,'form':form, 'patprofileedit' : patprofileedit} )
elif request.method == 'POST':
try:
form = medInfo_form(request.POST, instance=med)
form.save()
return redirect(patientlist)
except ValueError:
return render(request, 'pmp/medinfo.html', {'form': form, 'error': 'Data entered is wrong!'})
except medInfo.DoesNotExist:
if request.method == 'GET':
return render(request, 'pmp/medinfo.html', {'patprofileedit' : patprofileedit} )
elif request.method == 'POST':
try:
form = medInfo_form(request.POST)
newmed = form.save(commit=False)
newmed.pat_ID = patientprofile.objects.get(id=patid)
newmed.save()
return redirect(patientlist)
except ValueError:
return render(request, 'pmp/medinfo.html', {'form': form, 'error': 'Data entered is Wrong!'})