Generic detail view GetPWView must be called with either an object pk or a slug in the URLconfの解消
解決したいこと
Generic detail view GetPWView must be called with either an object pk or a slug in the URLconfを解消したいです。
アプリの概要
ユーザごとにkeyとpasswordを入力してもらい、別ページでkeyを指定することでpasswordを取得できるpassword管理アプリです。
発生している問題・エラー
/getpw/
Traceback (most recent call last):
File "C:\Users\user\Documents\Django-2\web_app\Lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\Documents\Django-2\web_app\Lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\Documents\Django-2\web_app\Lib\site-packages\django\views\generic\base.py", line 69, in view
return self.dispatch(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\Documents\Django-2\web_app\Lib\site-packages\django\views\generic\base.py", line 101, in dispatch
return handler(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\Documents\Django-2\web_app\Lib\site-packages\django\views\generic\detail.py", line 106, in get
self.object = self.get_object()
^^^^^^^^^^^^^^^^^
File "C:\Users\user\Documents\Django-2\web_app\Lib\site-packages\django\views\generic\detail.py", line 45, in get_object
raise AttributeError(
AttributeError: Generic detail view GetPWView must be called with either an object pk or a slug in the URLconf.
[01/Dec/2023 01:44:59] "GET /getpw/ HTTP/1.1" 500 79103
該当するソースコード
views.py
from django.views.generic import CreateView, DetailView, TemplateView
from django.urls import reverse_lazy
from .models import PassManage
from .forms import PassManageForm
from accounts.models import CustomUser
class CreatePWDictView(CreateView):
template_name = 'passdict.html'
form_class = PassManageForm
success_url = reverse_lazy('passmanage:createdict')
def form_valid(self, form):
pwdict = form.save(commit=False)
pwdict.user_id = self.request.user.id
pwdict.save()
return super().form_valid(form)
class GetPWView(DetailView):
template_name = 'get_pw.html'
success_url = reverse_lazy('passmanage:copypw')
model = PassManage
field = ['key']
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['obj_pk'] = PassManage.objects.get(pk=self.kwargs['pk'])
return context
models.py
from django.db import models
from django.urls import reverse
from accounts.models import CustomUser
class PassManage(models.Model):
user = models.ForeignKey(
CustomUser,
on_delete=models.CASCADE,
)
key = models.CharField(
verbose_name='キー',
max_length=20,
)
pw = models.TextField(
verbose_name='パスワード',
max_length=100,
)
get_pw.html
{% extends 'base.html' %}
{% block contents %}
{{ obj_pk.pw }}
{% endblock %}
自分で試したこと
context['obj_pk'] = PassManage.objects.get(pk=self.kwargs['pk'])
のpkなどの部分を色々と変えて試してみました。
0 likes