Локальная переменная '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!'})
Вернуться на верх