質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1101閲覧

投稿一覧の名前(投稿者)をクリックしたら、その人のプロフィールページに飛びたい

momonga8316

総合スコア2

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/09/10 11:14

前提・実現したいこと

投稿サイトを作っています。
実現したいことは、

投稿者の名前をクリックしたら、その投稿をした人のプロフィールページに飛びたい

です。

発生している問題・エラーメッセージ

エラー文などは表示されませんが、どの投稿の名前(投稿者)をクリックしても、現在ログインしている人のプロフィールページに飛んでしまいます。

ログインユーザーはプロフィールとは別にマイページがあります。
マイページとプロフィールページは別物です。

該当のソースコード

models.py

python

1 2class Profile(models.Model): 3 class Meta: 4 verbose_name = 'ユーザー情報データ' 5 verbose_name_plural = 'ユーザー情報データ' 6 7 user = models.OneToOneField(User, verbose_name='ユーザー',null=True, blank=True, on_delete=models.CASCADE) 8 9 id = models.CharField('ユーザーID',max_length=20,primary_key=True) # 'user_name' 10 email = models.EmailField('メールアドレス', max_length=255, null=True) 11 full_name = models.CharField('氏名',max_length=50) # 12 company = models.CharField('所属',max_length=50) # 13 position = models.CharField('役職',max_length=50) # 14 image = models.ImageField(upload_to='media/images/user_image',null=True, blank=True,) # 'プロフィール画像' 15 introduce = models.TextField('自己紹介',blank=True,null=True,max_length=1000) # '自己紹介文' 16 URL = models.URLField() # 'TwitterURL' 17 18 #管理画面で表示される文字列を定義する 19 def __str__(self): 20 #ログインログアウト機能の時に追加 21 user_str = '' 22 if self.user is not None: 23 user_str = '(' + self.user.username + ')' 24 25 return self.id 26 27class Post(models.Model): 28 class Meta: 29 verbose_name = '投稿データ' 30 verbose_name_plural = '投稿データ' 31 tags = models.ManyToManyField(Tag, blank=True) 32 title = models.TextField(blank=True) 33 content = models.TextField(blank=True) 34 description = models.TextField(blank=True) 35 price = models.PositiveSmallIntegerField('価格',blank=True, default=0) 36 created_at = models.DateTimeField(auto_now_add=True) 37 updated_at = models.DateTimeField(auto_now=True) 38 published_at = models.DateTimeField(blank=True, null=True) 39 user = models.ForeignKey(get_user_model(),verbose_name='投稿者',null=True, blank=True,on_delete=models.CASCADE) 40 like_num = models.IntegerField('いいね', default=0) 41 42 class Meta: 43 ordering = ['-created_at'] 44 45 def __str__(self): 46 return self.title

urls.py

python

1 2urlpatterns = [ 3 path('mypage', mypage.mypage_top, name='mypage_top'), 4 5 #ユーザープロフィール詳細ページ 6 path('profile/<slug:user_id>/', profile.detail_view, name='profile_detail'), #ココ! 7

profile.py

python

1 2 3def detail_view(request, user_id): #uls.pyの「path('profile/<slug:user_id>'」が読み込まれている 4 user = get_object_or_404(User, id=user_id) 5 print(user_id) 6 #ユーザーが投稿したものをリストで表示させる 7 post_list = Post.objects.all().filter(user_id=user.id) 8 #ユーザーがいいねしたものをリストで表示させる 9 like_id = Like.objects.all().filter(user_id=user.id).values_list('post_id', flat=True) 10 post_like_list = Post.objects.filter(id__in=like_id) 11 #ユーザーが購入したものをリストで表示させる 12 purchase_id = Purchase.objects.all().filter(purchased_user_id=user.id).values_list('purchased_post_id', flat=True) 13 post_purchase_list = Post.objects.filter(id__in=purchase_id) 14 15 16 return render(request, 'stokee/profile_detail.html', {'user':user,'post_list': post_list,'post_like_list': post_like_list, 'post_purchase_list': post_purchase_list }) 17

index.html

python

1<a href="{% url 'stokee:profile_detail' user_id=user.id %}">{{ post.user.profile.full_name ここに投稿者の名前が表示されている}}</a> 2

試したこと

profile/user_idがダメなら、
prufile/username にしてみようかと

user = Profile.objects.filter(user_id='user_id').values('id')

を試したり、

user = User.objects.get(username=user_id)

など、基本的にviewsをいじってみましたが、上手くいきませんでした。

ちなみに、index.htmlの投稿者の名前リンクから飛ぼうとせず、URLを直接https~/profile/1/https~/profile/2/と打つと、きちんと管理データに登録されているユーザー情報が表示されます。

補足情報(FW/ツールのバージョンなど)

mac M1 shell:zsh python django

なかなか表示されなくて困っております。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

user.idのみだと現在ログインしているユーザのIDを指定しているような気がします。
postデータのuserのidを指定するのはpost.user.idで出来るのではないかと思います。

python

1<a href="{% url 'stokee:profile_detail' user_id=post.user.id %}">{{ post.user.profile.full_name ここに投稿者の名前が表示されている}}</a>

投稿2021/09/10 13:13

holy_

総合スコア364

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momonga8316

2021/09/10 13:23

holy_さん!今回も回答いただきありがとうございます。 holy_さんに教えていただいたように変更したところ、正常に表示されました・・・!(泣) 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問