Как я могу решить эту ошибку [отсутствует 1 обязательный позиционный аргумент: 'запрос']? - PullRequest
0 голосов
/ 29 марта 2020

Когда я пытался использовать сеанс в классе DetailView в проекте Django, у меня возникла ошибка, и она не работает из-за отсутствия объекта запроса.

в этом случае, как мне это сделать? ?

Не могли бы вы рассказать мне, как мне решить эту проблему?

Заранее спасибо.


код ошибки

TypeError at /detail/41/
check_session() missing 1 required positional argument: 'request'

views.py

class DetailView(LoginRequiredMixin, generic.DetailView):  
  model = sampleDB
  template_name = 'detail.html'

  def check_session(self, request):
      if not 'history' in request.session:
          request.session['history'] = {'user': self.request.user, 'id': self.kwargs['pk']}

  def get_context_data(self, **kwargs):
      self.check_session()
      context = super().get_context_data(**kwargs)
      return context

project / urls.py

from django.contrib import admin
from django.contrib.staticfiles.urls import static
from django.urls import path, include


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('main.urls')),
    path('accounts/', include('allauth.urls')),
]

app / urls.py

from django.urls import path
from . import views

app_name = 'app'
urlpatterns = [
    path('', views.WelcomeView.as_view(), name='welcome'),
    path('home/', views.HomeView.as_view(), name='home'),
    path('detail/<int:pk>/', views.DetailView.as_view(), name='detail'),
    path('detail_edit/<int:pk>/', views.DetailEditView.as_view(), name='detail_edit'),
    path('resister_history/', views.ResisterHistoryView.as_view(), name='resister_history'),
    path('resister_vegetable/', views.ResisterVegetableView.as_view(), name='resister_vegetable'),
    path('delete/<int:pk>/', views.DeleteView.as_view(), name='delete'),
    path('inquiry_login/', views.InquiryLoginView.as_view(), name='inquiry_login'),
    path('inquiry/', views.InquiryView.as_view(), name='inquiry'),

    path('404/', views.Error404View.as_view(), name='404'),
    path('403/', views.Error403View.as_view(), name='403'),
    path('500/', views.Error500View.as_view(), name='500'),

]

Среда разработки

  • Python: 3,7,5
  • Django: 2.2.2

1 Ответ

0 голосов
/ 29 марта 2020

check_session() missing 1 required positional argument: 'request'

В какой-то момент вы вызываете метод check_session(). Метод check_session() определяется следующим образом:

def check_session(self, request):

Это означает, что вы указали, что метод должен ожидать, что он будет вызываться так: check_session(request=some_value) вместо check_session(some_value)

Можно передать его как check_session(some_value), но тогда вам придется перебрать kwargs, чтобы найти то, что вы ищете. Но менее читабельно и больше работает.


После утреннего кофе:

В views.py вы звоните self.check_session() из get_context_data. check_session ожидает, что ему что-то передадут. Вы ничего не пропустите.

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