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

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

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

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

Python 3.x

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

Python

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

Q&A

解決済

1回答

367閲覧

user_followers = [] に値が保存されない

ashigaru21

総合スコア4

Django

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

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2022/12/12 08:07

編集2022/12/13 02:12

前提

DjangoでSNSアプリを作っているのですが、フォロー機能の搭載がうまくいきません。

実現したいこと

フォロー機能の完成

発生している問題

follow_button_value = 'unfollow' のunfollowが返ってこない。 logged_in_user と user_followers が同じなのに機能しない。

models.py(FollowApp)

from django.db import models from accounts.models import CustomUser # Create your models here. class FollowersCount(models.Model): FollowerID = models.ForeignKey(CustomUser, on_delete=models.CASCADE,related_name='UserFollowerID') FollowerUserID = models.OneToOneField(CustomUser, on_delete=models.CASCADE,related_name='UserUserID') # Create your models here.

views.py(FollowApp)

1from django.shortcuts import render,get_object_or_404,redirect 2from accounts.models import CustomUser 3from follow.models import FollowersCount 4# Create your views here. 5 6 7def follow_base(request): 8 #モデルで作成したCustomUserクラスからログイン中のユーザー情報を取得 9 user_data = CustomUser.objects.get(id = request.user.id) 10 data = CustomUser.objects.all() 11 params = { 12 'data':data, 13 } 14 return render(request,'follow/follow_base.html',params) 15 16def follow_index(request,UserID): 17 CustomUser_data = get_object_or_404(CustomUser,UserID=UserID) 18 19 FollowUserID = CustomUser_data.UserID 20 current_user = FollowUserID #フォローするユーザー 21 logged_in_user = request.user.UserID #ログインしているユーザー(自分) 22 user = CustomUser.objects.get(UserID=UserID) 23 followers = logged_in_user #フォローするユーザー 24 25 user_followers = [] 26 if logged_in_user in user_followers: 27 user_followers.remove(logged_in_user) 28 follow_button_value = 'unfollow' 29 else: 30 user_followers.append(followers) 31 follow_button_value = 'follow' 32 33 params = { 34 'CustomUser_data': CustomUser_data, 35 'current_user':current_user, 36 'logged_in_user':logged_in_user, 37 } 38 return render(request,'follow/follow_count.html',params)

follow_count.html(FollowApp)

1{% extends 'app/base.html' %} 2{% block content %} 3 4<div class="select-container"> 5 <h1 class="title">User詳細</h1> 6 <div class="select-card"> 7 <div class="card-imgframe"> 8 <img src="{{ CustomUser_data.ProfileImage.url }}" width="350" height="400" /> 9 </div> 10 <div class="select-card-textbox"> 11 <div class="select-card-name"> 12 <h1>{{ CustomUser_data.UserID }}</h1> 13 </div> 14 <div class="select-card-text"> 15 <h3>{{ CustomUser_data.name }}</h3> 16 </div> 17 <div class="select-card-explain"> 18 <h4>{{ CustomUser_data.bio }}</h4> 19 </div> 20 <div class="select-card-explain"> 21 <h4>フォロワー:{{ CustomUser_data.Follower }}</h4> 22 </div> 23 <div class="select-card-explain"> 24 <h4>フォロー中:{{ CustomUser_data.Following }}</h4> 25 </div> 26 </div> 27 <form action="followers_count" method="POST"> 28 {% csrf_token %} 29 <input type="hidden" name="user" value="{{current_user}}" readonly/> <!--ここはフォローしたいユーザー(相手)--> 30 <input type="hidden" name="follower" value="{{logged_in_user}}" readonly/> <!--ここはログインしているユーザー(自分)--> 31 {% if follow_button_value == 'follow' %} 32 <input type="hidden" name="value" value="follow" readonly/> 33 <button type="submit" class="btn profile-edit-btn"> 34 Follow 35 </button> 36 {% else %} 37 <input type="hidden" name="value" value="unfollow" readonly/> 38 <button type="submit" class="btn profile-edit-btn"> 39 Unfollow 40 </button> 41 {% endif %} 42 </form> 43 </div> 44</div> 45 46{% endblock %}

models.py(AccountsApp)

1class CustomUser(AbstractBaseUser, PermissionsMixin): 2 UserID = models.CharField(('UserID'),max_length=15,unique=True,null=False) 3 name = models.CharField(('Name'),max_length=32,unique=True,null=False) 4 email = models.EmailField(('Email'),max_length=256,unique=True) 5 birthday = models.DateTimeField(('Birthday'), default=timezone.now) 6 bio = models.CharField(('bio'),max_length=1056) 7 ProfileImage = models.ImageField(upload_to='images', verbose_name='ProfileImage',null=True,blank=True) 8 created_at = models.DateTimeField(('create'), default= timezone.now) 9 Follower = models.IntegerField(default=0) 10 Following = models.IntegerField(default=0)

試したこと

さまざまなやり方を試してきましかが、どれも機能しませんでした。

user_followers = [] がずっと空になっていることが原因だそうです。
user_followers.append(followers)で値を追加しているはずが、user_followersに追加されていないようです。
どうすれば、user_followersに値が入って保存されますか?

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

Django~=3.1.4
django-allauth~=0.41.0
django-widget-tweaks~=1.4.8

https://www.youtube.com/watch?v=hKflMkEsIrI&t=1153s

上記の動画を参考に作っています。

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

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

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

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

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

yuma.inaura

2022/12/12 08:12

どの部分が問題なのでしょうか?
ashigaru21

2022/12/12 08:14

views.pyの def follow_index(request,UserID): CustomUser_data = get_object_or_404(CustomUser,UserID=UserID) FollowUserID = CustomUser_data.UserID current_user = FollowUserID #フォローするユーザー logged_in_user = request.user.UserID #ログインしているユーザー(自分) user = CustomUser.objects.get(UserID=UserID) followers = logged_in_user #フォローするユーザー user_followers = [] if logged_in_user in user_followers: user_followers.remove(logged_in_user) follow_button_value = 'unfollow' else: user_followers.append(followers) follow_button_value = 'follow' のこのIF分のところが正常に動かずに困っています。
yuma.inaura

2022/12/12 08:18

正常に動かないというのはどんな状態なんでしょう? 表題の「リストエラー」はどこで起こっていますか
ashigaru21

2022/12/12 13:21

説明不足で、すみません。 上記のシステムのviews.py(8行目から)に問題があり、このシステムはuser_followers = [] の中に今ログインしているユーザー(logged_in_user)か入っていればunfollow、入っていなければfollowをfollow_button_valueで返すのですが、followの値しかfollow_button_valueに入ってなくて、unfollowの値が帰ってこない状態です。 エラーコードは出ていませんが、上記の操作がうまくいかずに息詰まっている状態です。
guest

回答1

0

ベストアンサー

テストしてませんので動くかわかりませんが
user_followers を毎度初期化しているのが原因ではないでしょうか?
モジュール変数として宣言すれば値が保持されるのでは・・・・

python

1from django.shortcuts import render,get_object_or_404,redirect 2from accounts.models import CustomUser 3from follow.models import FollowersCount 4# Create your views here. 5 6user_followers = [] 7 8def follow_base(request): 9 #モデルで作成したCustomUserクラスからログイン中のユーザー情報を取得 10 user_data = CustomUser.objects.get(id = request.user.id) 11 data = CustomUser.objects.all() 12 params = { 13 'data':data, 14 } 15 return render(request,'follow/follow_base.html',params) 16 17def follow_index(request,UserID): 18 CustomUser_data = get_object_or_404(CustomUser,UserID=UserID) 19 20 FollowUserID = CustomUser_data.UserID 21 current_user = FollowUserID #フォローするユーザー 22 logged_in_user = request.user.UserID #ログインしているユーザー(自分) 23 user = CustomUser.objects.get(UserID=UserID) 24 followers = logged_in_user #フォローするユーザー 25 26 # user_followers = [] ←ここで毎度初期化してます 27 if logged_in_user in user_followers: # ←1行前で初期化しているのでこのIf分岐には入ってこない 28 user_followers.remove(logged_in_user) 29 follow_button_value = 'unfollow' 30 else: 31 user_followers.append(followers) 32 follow_button_value = 'follow' 33 34 params = { 35 'CustomUser_data': CustomUser_data, 36 'current_user':current_user, 37 'logged_in_user':logged_in_user, 38 } 39 return render(request,'follow/follow_count.html',params)

投稿2022/12/12 15:14

odataiki

総合スコア938

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

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

ashigaru21

2022/12/12 17:12

ありがとうございます!!この書き方で問題が解決しました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問