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

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

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

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

Python

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

Q&A

0回答

1374閲覧

Python Django超入門 ミニSNS ValueError

N-Koki

総合スコア0

Django

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

Python

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

0グッド

0クリップ

投稿2021/02/06 08:54

前提・実現したいこと

Python Django超入門という書籍のミニSNSサンプルコードのエラーを解決したいです。

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

Python

1ValueError at /sns/ 2Cannot use QuerySet for "Group": Use a QuerySet for "User". 3

該当のソースコード

ソースコード

Python

1from django.shortcuts import render 2from django.shortcuts import redirect 3from django.contrib.auth.models import User 4from django.contrib import messages 5 6from .models import Message,Friend,Group,Good 7from .forms import GroupCheckForm,GroupSelectForm,\ 8 SearchForm,FriendsForm,CreateGroupForm,PostForm 9 10from django.db.models import Q 11from django.contrib.auth.decorators import login_required 12 13 14@login_required(login_url='/admin/login/') 15def index(request): 16 (public_user, public_group) = get_public() 17 if request.method == 'POST': 18 if request.POST['mode'] == '__check_form__': 19 searchform = SearchForm() 20 checkform = GroupCheckForm(request.user,request.POST) 21 glist = [] 22 for item in request.POST.getlist('groups'): 23 glist.append(item) 24 messages = get_your_group_message(request.user, \ 25 glist, None) 26 27 if request.POST['mode'] == '__search_form__': 28 searchform = SearchForm(request.POST) 29 checkform = GroupCheckForm(request.user) 30 gps = Group.objects.filter(owner=request.user) 31 glist = [public_group] 32 for item in gps: 33 glist.append(item) 34 messages = get_your_group_message(request.user, glist, \ 35 request.POST['search']) 36 37 else: 38 searchform = SearchForm() 39 checkform = GroupCheckForm(request.user) 40 gps = Group.objects.filter(owner=request.user) 41 glist = [public_group] 42 for item in gps: 43 glist.append(item) 44 messages = get_your_group_message(request.user, glist, None) 45 46 params = { 47 'login_user':request.user, 48 'contents':messages, 49 'check_form':checkform, 50 'search_form':searchform, 51 } 52 return render(request, 'sns/index.html', params) 53 54@login_required(login_url='/admin/login/') 55def groups(request): 56 friends = Friend.objects.filter(owner=request.user) 57 58 if request.method == 'POST': 59 60 if request.POST['mode'] == '__groups_form__': 61 sel_group = request.POST['groups'] 62 gp = Group.objects.filter(owner=request.user) \ 63 .filter(title=sel_group).first() 64 fds = Friend.objects.filter(owner=request.user) \ 65 .filter(group=gp) 66 vlist = [] 67 for item in fds: 68 vlist.append(item.user.username) 69 groupsform = GroupSelectForm(request.user,request.POST) 70 friendsform = FriendsForm(request.user, \ 71 friends=friends, vals=vlist) 72 73 if request.POST['mode'] == '__friends_form__': 74 sel_group = request.POST['group'] 75 group_obj = Group.objects.filter(title=sel_group).first() 76 sel_fds = request.POST.getlist('friends') 77 sel_users = User.objects.filter(username__in=sel_fds) 78 fds = Friend.objects.filter(owner=request.user) \ 79 .filter(user__in=sel_users) 80 vlist = [] 81 for item in fds: 82 item.group = group_obj 83 item.save() 84 vlist.append(item.user.username) 85 messages.success(request, ' チェックされたFriendを' + \ 86 sel_group + 'に登録しました。') 87 groupsform = GroupSelectForm(request.user, \ 88 {'groups':sel_group}) 89 friendsform = FriendsForm(request.user, \ 90 friends=friends, vals=vlist) 91 92 else: 93 groupsform = GroupSelectForm(request.user) 94 friendsform = FriendsForm(request.user, friends=friends, \ 95 vals=[]) 96 sel_group = '-' 97 98 createform = CreateGroupForm() 99 params = { 100 'login_user':request.user, 101 'groups_form':groupsform, 102 'friends_form':friendsform, 103 'create_form':createform, 104 'group':sel_group, 105 } 106 return render(request, 'sns/groups.html', params) 107 108@login_required(login_url='/admin/login/') 109def add(request): 110 add_name = request.GET['name'] 111 add_user = User.objects.filter(username=add_name).first() 112 if add_user == request.user: 113 messages.info(request, "自分自身をFriendに追加することはできません。") 114 return redirect(to='/sns') 115 (public_user, public_group) = get_public() 116 frd_num = Friend.objects.filter(owner=request.user) \ 117 .filter(user=add_user).count() 118 if frd_num > 0: 119 messages.info(request, add_user.username + \ 120 ' は既に追加されています。') 121 return redirect(to='/sns') 122 123 frd = Friend() 124 frd.owner = request.user 125 frd.user = add_user 126 frd.group = public_group 127 frd.save() 128 messages.success(request, add_user.username + ' を追加しました! \ 129 groupページに移動して、追加したFriendをメンバーに設定して下さい。') 130 return redirect(to='/sns') 131 132@login_required(login_url='/admin/login/') 133def creategroup(request): 134 gp = Group() 135 gp.owner = request.user 136 gp.title = request.POST['group_name'] 137 gp.save() 138 messages.info(request, '新しいグループを作成しました。') 139 return redirect(to='/sns/groups') 140 141@login_required(login_url='/admin/login/') 142def post(request): 143 if request.method == 'POST': 144 gr_name = request.POST['groups'] 145 content = request.POST['content'] 146 group = Group.objects.filter(owner=request.user) \ 147 .filter(title=gr_name).first() 148 if group == None: 149 (pub_user, group) = get_public() 150 msg = Message() 151 msg.owner = request.user 152 msg.group = group 153 msg.content = content 154 msg.save() 155 messages.success(request, '新しいメッセージを投稿しました!') 156 return redirect(to='/sns') 157 158 else: 159 form = PostForm(request.user) 160 161 params = { 162 'login_user':request.user, 163 'form':form, 164 } 165 return render(request, 'sns/post.html', params) 166 167@login_required(login_url='/admin/login/') 168def share(request, share_id): 169 share = Message.objects.get(id=share_id) 170 171 if request.method == 'POST': 172 gr_name = request.POST['groups'] 173 content = request.POST['content'] 174 group = Group.objects.filter(owner=request.user) \ 175 .filter(title=gr_name).first() 176 if group == None: 177 (pub_user, group) = get_public() 178 msg = Message() 179 msg.owner = request.user 180 msg.group = group 181 msg.content = content 182 msg.share_id = share.id 183 msg.save() 184 share_msg = msg.get_share() 185 share_msg.share_count += 1 186 share_msg.save() 187 messages.success(request, 'メッセージをシェアしました!') 188 return redirect(to='/sns') 189 190 form = PostForm(request.user) 191 params = { 192 'login_user':request.user, 193 'form':form, 194 'share':share, 195 } 196 return render(request, 'sns/share.html', params) 197 198@login_required(login_url='/admin/login/') 199def good(request, good_id): 200 good_msg = Message.objects.get(id=good_id) 201 is_good = Good.objects.filter(owner=request.user) \ 202 .filter(message=good_msg).count() 203 if is_good > 0: 204 messages.success(request, '既にメッセージにはGoodしています。') 205 return redirect(to='/sns') 206 207 good_msg.good_count += 1 208 good_msg.save() 209 good = Good() 210 good.owner = request.user 211 good.message = good_msg 212 good.save() 213 messages.success(request, 'メッセージにGoodしました!') 214 return redirect(to='/sns') 215 216def get_your_group_message(owner, glist, find): 217 (public_user,public_group) = get_public() 218 groups = Group.objects.filter(Q(owner=owner) \ 219 |Q(owner=public_user)).filter(title__in=glist) 220 me_friends = Friend.objects.filter(group__in=groups) 221 me_users = [] 222 for f in me_friends: 223 me_users.append(f.user) 224 his_groups = Group.objects.filter(owner__in=me_users) 225 his_friends = Friend.objects.filter(user=owner) \ 226 .filter(group__in=his_groups) 227 me_groups = [] 228 for hf in his_friends: 229 me_groups.append(hf.group) 230 if find==None: 231 messages = Message.objects.filter(Q(group__in=groups) \ 232 |Q(group__in=me_groups))[:100] 233 else: 234 messages = Message.objects.filter(Q(group__in=groups) \ 235 |Q(group__in=me_groups)) \ 236 .filter(content__contains=find)[:100] 237 return messages 238def get_public(): 239 public_user = User.objects.filter(username='public').first() 240 public_group = Group.objects.filter \ 241 (owner=public_user).first() 242 return (public_user, public_group)

試したこと

書籍のサンプルコードをコピペして実行してみても、エラーを解決できませんでした。

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

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問