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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1474閲覧

DjangoでManyToManyFieldを使ったフォロー機能を実装したがテンプレートに詳細を表示できない

dari

総合スコア0

Django

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/10/02 16:07

前提・実現したいこと

初心者、初質問です。
DjangoでManyToManyFieldを利用したフォロー機能を作成しています。

フォロー機能自体は作り稼働を確認したものの、
テンプレートにフォロワーとフォロー中のユーザー一覧をうまく表示できません。

該当のソースコード

accounts/models.py

class User(AbstractBaseUser, PermissionsMixin): """ AbstractUserの一部を変更 https://github.com/django/django/blob/master/django/contrib/auth/models.py """ username_validator = UnicodeUsernameValidator() username = models.CharField( _('username'), max_length=20, unique=True, #@、.、+、-も使用できる。今後@をユーザー返信などで使うなら改造必須。 help_text=_('【入力必須】20文字以下。英数字のみ。'), validators=[username_validator], error_messages={ 'unique': _("このユーザーネームはすでに登録されています。"), }, ) ...省略 followers = models.ManyToManyField('self', blank=True,symmetrical=False ) ...省略

post/urls

from django.urls import path from . import views app_name = 'post' urlpatterns = [ path('', views.index, name='index'), path('<username>/',views.user_profile,name='user_profile'), ]

post/views.py

def user_profile(request, username): profile_user = User.objects.get(username=username) #フォロー中 profile_followees = profile_user.followers.all() profile_followees_count = profile_followees.count() #フォローワ― profile_followers = User.objects.filter(followers=profile_user) profile_followers_count = profile_followers.count() return TemplateResponse(request, 'post/user_profile.html', {'profile_user': profile_user, 'user_haikus': user_haikus, 'profile_followees': profile_followees, 'profile_followees_count': profile_followees_count, 'profile_followers': profile_followers, 'profile_followers_count': profile_followers_count, })

template/user_profile.html

{% extends 'base.html' %} {% block body %} <h2>{{ profile_user.username }}</h2> <p>{{ profile_followees_count }}人をフォロー中</p> <!-- フォロー中リスト--> {% for followee in profile_user.profile_followees.all %} <p>{{ followee }}</p> {% endfor %} <p>{{ profile_followers_count }}人がフォロワー</p> <!-- フォローワーリスト--> {% for follower in profile_user.profile_followers.all %} <p>{{ follower }}</p> {% endfor %} {% for user_haiku in user_haikus %} <ul> <li>{{ user_haiku.haiku }}</li> </ul> {% endfor %} {% endblock %}

フォロー中とフォロワーの人数は表示できましたが、
フォロー中とフォロワーのユーザー名を取得したいです。

フォロー中のユーザー名はprofile_user.followers.allで取得できることを確認していますが、
できればviews.pyを使って取りたいです。

具体的にどのようにすれば解決できるできるでしょうか。
どなたか教えて頂ければ嬉しいです。

よろしくお願いいたします。

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

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

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

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

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

ForestSeo

2020/10/02 21:59 編集

> フォロー中のユーザー名はprofile_user.followers.allで取得できる... なら、それを表示すればいいのではないでしょうか?
dari

2020/10/03 09:16

自己解決しました。ありがとうございました。
guest

回答1

0

自己解決

ありがとうございました。

ManyToManyFieldにrelated_nameを追記して解決しました。
逆参照?的な考え方があるのですね。勉強になりました。

投稿2020/10/03 09:13

dari

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問