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

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

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

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

Python 3.x

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Python

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

538閲覧

Databaseエラー

ashigaru21

総合スコア4

Django

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

Python 3.x

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Python

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1グッド

0クリップ

投稿2022/12/06 04:02

前提

DjangoでSNSを作っています。
Follow機能を実装中に以下のエラーメッセージが発生しました。

実現したいこと

エラーを解決する

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

Cannot assign "User": "FollowersCount.FollowerID" must be a "CustomUser" instance.

該当のソースコード

models.py(FollowApp)

1from django.db import models 2from accounts.models import CustomUser 3# Create your models here. 4 5class FollowersCount(models.Model): 6 FollowerID = models.ForeignKey(CustomUser, on_delete=models.CASCADE,related_name='UserFollowerID') 7 Follower_UserID = models.OneToOneField(CustomUser, on_delete=models.CASCADE,related_name='UserUserID')

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 10 11 is_staff = models.BooleanField( 12 ('staff status'), 13 default=False, 14 help_text=('Designates whether the user can log into this admin site.'), 15 ) 16 is_active = models.BooleanField( 17 ('active'), 18 default=True, 19 help_text=( 20 'Designates whether this user should be treated as active. ' 21 'Unselect this instead of deleting accounts.' 22 ), 23 ) 24 25 objects = UserManager() 26 27 USERNAME_FIELD = 'email' 28 EMAIL_FIELD = 'email' 29 REQUIRED_FIELDS = [] 30 31 class Meta: 32 verbose_name = ('user') 33 verbose_name_plural = ('users') 34 35 def clean(self): 36 super().clean() 37 self.email = self.__class__.objects.normalize_email(self.email)

views.py(followApp)

1from django.shortcuts import render,get_object_or_404,redirect 2from accounts.models import CustomUser 3from .models import FollowersCount 4# Create your views here. 5 6def follow_base(request): 7 #モデルで作成したCustomUserクラスからログイン中のユーザー情報を取得 8 user_data = CustomUser.objects.get(id = request.user.id) 9 data = CustomUser.objects.all() 10 params = { 11 'data':data, 12 } 13 return render(request,'follow/follow_base.html',params) 14 15def follow_index(request,pk): 16 CustomUser_data = get_object_or_404(CustomUser,pk=pk) 17 18 Follow_UserID = CustomUser_data.UserID 19 current_user = Follow_UserID #フォローするユーザー 20 logged_in_user = request.user.UserID #ログインしているユーザー(自分) 21 print(current_user) 22 print(logged_in_user) 23 params = { 24 'CustomUser_data': CustomUser_data, 25 'current_user':current_user, 26 'logged_in_user':logged_in_user, 27 } 28 return render(request,'follow/follow_count.html',params) 29 30 31def follow_count(request,pk): 32 #UserID = CustomUser.objects.get(UserID=UserID) 33 #FolloweID = CustomUser.objects.get(FolloweID=UserID) 34 if request.method == 'POST': 35 value = request.POST['value'] 36 user = request.POST['user'] 37 follower = request.POST['follower'] 38 print(value) 39 print(user) 40 print(follower) 41 if value == 'follow': 42 followers_cnt = FollowersCount.objects.create(FollowerID= user, Follower_UserID = follower) 43 followers_cnt.save() 44 45 return redirect('/?user='+user) 46

follow_count.html(tmplates/follow)

1<div class="select-container"> 2 <h1 class="title">User詳細</h1> 3 <div class="select-card"> 4 <div class="card-imgframe"> 5 <img src="{{ CustomUser_data.ProfileImage.url }}" width="350" height="400" /> 6 </div> 7 <div class="select-card-textbox"> 8 <div class="select-card-name"> 9 <h1>{{ CustomUser_data.UserID }}</h1> 10 </div> 11 <div class="select-card-text"> 12 <h3>{{ CustomUser_data.name }}</h3> 13 </div> 14 <div class="select-card-explain"> 15 <h4>{{ CustomUser_data.bio }}</h4> 16 </div> 17 </div> 18 <form action="followers_count" method="POST"> 19 {% csrf_token %} 20 <input type="hidden" name="user" value="{{current_user}}" readonly/> <!--ここはフォローしたいユーザー(相手)--> 21 <input type="hidden" name="follower" value="{{logged_in_user}}" readonly/> <!--ここはログインしているユーザー(自分)--> 22 <input type="hidden" name="value" value="follow" readonly/> 23 <button type="submit" class="btn profile-edit-btn"> 24 Follow 25 </button> 26 </form> 27 </div> 28</div> 29 30

試したこと

databaseなどの見直しや作り直しを何回もしましたが、このエラーが出てきてしまいわかりません。

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

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

ashigaru21👍を押しています

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

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

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

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

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

yuma.inaura

2022/12/06 04:58

どんなタイミングでエラーが発生するんでしょうか? エラーの行番号は分かりませんか?
ashigaru21

2022/12/06 09:56

Followボタンを押すと(followApp)のviews.pyの followers_cnt = FollowersCount.objects.create(FollowerID= user, Follower_UserID = follower) 部分で上記のエラーが起こってしまいます。
guest

回答1

0

自己解決

views.py(followApp)

1def follow_count(request,pk): 2 CustomUser_data = get_object_or_404(CustomUser,pk=pk) 3 #UserID = CustomUser.objects.get(UserID=UserID) 4 #FolloweID = CustomUser.objects.get(FolloweID=UserID) 5 if request.method == 'POST': 6 value = request.POST['value'] 7 user = request.POST['user'] 8 follower = request.POST['follower'] 9 print(value) 10 print(user) 11 print(follower) 12 if value == 'follow': 13 follower_user = CustomUser.objects.get(UserID=follower) #追加 14 user_follower = CustomUser.objects.get(UserID=user) #追加 15 followers_cnt = FollowersCount.objects.create(FollowerID = follower_user, FollowerUserID = user_follower); 16 followers_cnt.save() 17 params = { 18 'CustomUser_data': CustomUser_data, 19 } 20 return redirect('/?user='+user)

#追加の部分でCustomUserと繋げることで動きました!!

投稿2022/12/06 09:59

ashigaru21

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問