@hoge_piyo

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

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

No Answers yet.

Your answer might help someone💌