Объект 'None Type' не имеет атрибута 'id' Hot to resolve Type Error - PullRequest
0 голосов
/ 06 августа 2020

Это система медицинского инвентаря. Кажется, не удается обойти эту ошибку типа. Я новичок в python и django. Я просмотрел другие похожие ошибки, но не нашел решения. вот мой файл views.py внутри домашнего каталога.

Пожалуйста, помогите ... спасибо.

from django.shortcuts import render, redirect, Http404, get_object_or_404
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseRedirect, JsonResponse
from accounts.models import Registration, YearEnding
from home.backup import BackupDatabase


@login_required(login_url='/account/login/')
def HomePage(request):
   if not request.user.is_authenticated():
       raise Http404
   try:
   **  current_session_id = request.session['session'] **
   except:
   **  currentSession = YearEnding.objects.order_by("-id").first()   **
   **  request.session['session'] = currentSession.id      **
       current_session_id = currentSession.id

   current_session = get_object_or_404(YearEnding, id = current_session_id)
   return render(request, 'home/index.html', {"current_session":current_session})


@login_required(login_url='/account/login/')
def takeBackup(request):
   if request.method == "GET" and request.is_ajax():
       forcefully = request.GET.get("forcefully")
       backup = BackupDatabase()
       response = backup.run(forcefully = int(forcefully))
       if response["code"] == 200:
           return JsonResponse(response, status=200)
       else:
           return JsonResponse(response, status=400)
    else:  
       return JsonResponse({}, status=400) 

1 Ответ

0 голосов
/ 06 августа 2020

Согласно документации :

Возвращает первый объект, соответствующий набору запросов, или None, если подходящего объекта нет.

Означает если не создан экземпляр YearEnding, то YearEnding.objects.order_by("-id").first() вернет None. Итак, вам нужно создать его. Вы можете сделать это с сайта администратора или из оболочки. Например:

>> python manage.py shell
>> [python] from my_app.models import YearEnding
>> [python] YearEnding.objects.create(field1=value1,field2=value2)

Еще одно предложение, вы можете удалить этот код:

if not request.user.is_authenticated():
   raise Http404

Поскольку вы используете декоратор @login_required, он автоматически запретит пользователям, не вошедшим в систему, вход в этот вид.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...