前提・実現したいこと
投稿サイトを作っています。
実現したいことは、
投稿者の名前をクリックしたら、その投稿をした人のプロフィールページに飛びたい
です。
発生している問題・エラーメッセージ
エラー文などは表示されませんが、どの投稿の名前(投稿者)をクリックしても、現在ログインしている人のプロフィールページに飛んでしまいます。
ログインユーザーはプロフィールとは別にマイページがあります。
マイページとプロフィールページは別物です。
該当のソースコード
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
なかなか表示されなくて困っております。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/10 13:23