teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

エラー内容の修正

2020/12/01 09:29

投稿

Mr_PONPON_MARU
Mr_PONPON_MARU

スコア35

title CHANGED
File without changes
body CHANGED
@@ -1,21 +1,23 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- Djangoで「https://<ホスト名>/mypage/<ユーザ名>」のようなアクセスでログイン中のマイページに行けるようにコードを書いていますが、下記のようにAttributeErrorが発生してしまいます。
3
+ Djangoで「https://<ホスト名>/mypage/<ユーザ名>」のようなアクセスでログイン中のマイページに行けるようにコードを書いていますが、下記のようにValueErrorが発生してしまいます。
4
4
 
5
- ユーザ名のようなstr型urlは設定きなのでょうか?
5
+ DetailView継承したMyPageViewでルーティング関するクラス変数をオーバーライドしても、デフォルトルーティングに使われるpkが変数として利用されてるままになってまいます。
6
- それともデータベースに問題があるのでしょうか...?
7
6
 
7
+ 他のQ&Aや公式を参考にしても、硫黄量を得られず、エラーが改善されずにどうしたら良いものかと..
8
+
9
+
8
10
  ### 発生している問題・エラーメッセージ
9
11
 
10
12
  ```
11
- AttributeError at /mypage/ユーザ名/
13
+ ValueError at /mypage/ユーザ名/
12
- 'str' object has no attribute '_default_manager'
14
+ Field 'id' expected a number but got 'ユーザ名'.
13
15
  Request Method: GET
14
16
  Request URL: http://localhost:8000/mypage/ユーザ名/
15
17
  Django Version: 3.0.3
16
- Exception Type: AttributeError
18
+ Exception Type: ValueError
17
19
  Exception Value:
18
- 'str' object has no attribute '_default_manager'
20
+ Field 'id' expected a number but got 'ユーザ名'.
19
21
  ```
20
22
 
21
23
  ### 該当のソースコード
@@ -36,13 +38,11 @@
36
38
  ```
37
39
  from django.shortcuts import render
38
40
  from django.views import generic
39
- from django.urls import reverse_lazy
40
- from django.contrib import messages
41
+ from accounts.models import CustomUser
41
- import logging
42
42
 
43
43
  class MyPageView(generic.DetailView):
44
44
  template_name = 'mypage.html'
45
- model = 'CustomUser'
45
+ model = CustomUser
46
46
  slug_field = 'username' #モデルのフィールド名
47
47
  slug_url_kwarg = 'mypage' #urls.pyでのキーワード名
48
48
  pk_url_kwarg = 'username' #ルーティングでの変数名の変更
@@ -62,17 +62,16 @@
62
62
  ```
63
63
  mypage.htmlへのリンク先
64
64
  ```
65
- <a class="dropdown-item" href="{% url 'article:mypage' user.get_username %}">Profile</a>
65
+ <a class="dropdown-item" href="{% url 'article:mypage' user.username %}">Profile</a>
66
66
  ```
67
67
 
68
- ### 試してみたこと
68
+ ### 調べてみたこと
69
69
 
70
- - urlpatternspath()関数数をpath('mypage/<**slug:username**>/', views.MyPageView.as_view(), name='mypage')した
70
+ url.pyでデフォルトルーティングはpkとなっており、下記DetailViewのクラス変数をオーバーライドするルーティングにpk以外を使用できるようになる。
71
- →同様のエラーとなってしまう
72
71
 
72
+ slug_field(モデルのフィールド名)
73
+ slug_url_kwarg(url.pyでのキーワード名)
73
- -テンプレートurlタグを
74
+ pk_url_kwarg(urls.pyで変数名)
74
- <a class="dropdown-item" href="{% url 'article:mypage' **user.username** %}">Profile</a>とした
75
- →同様のエラーとなってしまう
76
75
 
77
76
  ### 補足情報(FW/ツールのバージョンなど)
78
77
 

1

urlタグの中身とurls.pyのルーティング部の変更

2020/12/01 09:28

投稿

Mr_PONPON_MARU
Mr_PONPON_MARU

スコア35

title CHANGED
File without changes
body CHANGED
@@ -65,7 +65,15 @@
65
65
  <a class="dropdown-item" href="{% url 'article:mypage' user.get_username %}">Profile</a>
66
66
  ```
67
67
 
68
+ ### 試してみたこと
68
69
 
70
+ - urlpatternsの中のpath()関数の引数をpath('mypage/<**slug:username**>/', views.MyPageView.as_view(), name='mypage')とした
71
+ →同様のエラーとなってしまう
72
+
73
+ -テンプレートのurlタグを
74
+ <a class="dropdown-item" href="{% url 'article:mypage' **user.username** %}">Profile</a>とした
75
+ →同様のエラーとなってしまう
76
+
69
77
  ### 補足情報(FW/ツールのバージョンなど)
70
78
 
71
79
  - 認証機能にはdjango-allauthを使用しています。