Django administrationでnot definedエラーが出てしまいます。
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 1,343
プログラミング初心者です。
Python Django 超入門という参考書を読みながら学習をしているのですが、
サーバーにname 'public_user' is not definedというエラーで躓いてしまっております。
発生している問題・エラーメッセージ
name 'public_user' is not defined
該当のソースコード
【views.py】
from django.shortcuts import render
from django.shortcuts import redirect
from django.contrib.auth.models import User
from django.contrib import messages
from .models import Message,Friend,Group,Good
from .forms import GroupCheckForm,GroupSelectForm,SearchForm,FriendsForm,CreateGroupForm,PostForm
from django.db.models import Q
from django.contrib.auth.decorators import login_required
@login_required(login_url='/admin/login/')
def index(request):
(public_user, public_group) = get_public()
if request.method == 'POST':
if request.POST['mode'] == '__check_form__':
searchform = SearchForm()
checkform = GroupCheckForm(request.user,request.POST)
glist = []
for item in request.POST.getlist('groups'):
glist.append(item)
messages = get_your_group_message(request.user,glist, None)
if request.POST['mode'] == '__search_form__':
searchform = SearchForm(request.POST)
checkform = GroupCheckForm(request.user)
gps = Group.objects.filter(owner=request.user)
glist = [public_group]
for item in gps:
glist.append(item)
messages = get_your_group_message(request.user, glist, request.POST['search'])
else:
searchform = SearchForm()
checkform = GroupCheckForm(request.user)
gps = Group.objects.filter(owner=request.user)
glist = [public_group]
for item in gps:
glist.append(item)
messages = get_your_group_message(request.user, glist, None)
params = {
'login_user':request.user,
'contents':messages,
'check_form':checkform,
'search_form':searchform,
}
return render(request, 'sns/index.html', params)
@login_required(login_url='/admin/login/')
def groups(request):
friends = Friend.objects.filter(owner=request.user)
if request.method == 'POST':
if request.POST['mode'] == '__groups_form__':
sel_group = request.POST['groups']
gp = Group.objects.filter(owner=request.user).filter(title=sel_group).first()
fds = Friend.objects.filter(owner=request.user).filter(group=gp)
vlist = []
for item in fds:
vlist.append(item.user.username)
groupsform = GroupSelectForm(request.user,request.POST)
friendsform = FriendsForm(request.user,friends=friends, vals=vlist)
if request.POST['mode'] == '__friends_form__':
sel_group = request.POST['group']
group_obj = Group.objects.filter(title=sel_group).first()
sel_fds = request.POST.getlist('friends')
sel_users = User.objects.filter(username__in=sel_fds)
fds = Friend.objects.filter(owner=request.user).filter(user__in=sel_users)
vlist = []
for item in fds:
item.group = group_obj
item.save()
vlist.append(item.user.username)
messages.success(request, 'チェックされたFriendを'+ sel_group + 'に登録しました。')
groupsform = GroupSelectForm(request.user,{'groups':sel_group})
friendsform = FriendsForm(request.user,friends=friends, vals=vlist)
else:
groupsform = GroupSelectForm(request.user)
friendsform = FriendsForm(request.user,friends=friends,vals=[])
sel_group = '-'
createform = CreateGroupForm()
params = {
'login_user':request.user,
'groups_form':groupsform,
'friends_form':friendsform,
'create_form':createform,
'group':sel_group,
}
return render(request, 'sns/groups.html', params)
@login_required(login_url='/admin/login/')
def add(request):
add_name = request.GET['name']
add_user = User.objects.filter(username=add_name).first()
if add_user == request.user:
messages.info(request, "自分自身をFriendにすることはできません。")
return redirect(to='/sns')
(public_user,public_group) = get_public()
#add_userのFriendの数を調べる
frd_num = Friend.objects.filter(owner=request.user).filter(user=add_user).count()
if frd_num > 0:
messages.info(request, add_user.username + 'は既に追加されています。')
return redirect(to='/sns')
frd = Friend()
frd.owner = request.user
frd.user = add_user
frd.group = public_group
frd.save()
messages.success(request, add_user.username + 'を追加しました!groupページに移動して、追加したFriendをメンバーに設定してください。')
return redirect(to='/sns')
@login_required(login_url='/admin/login/')
def creategroup(request):
#Groupを作り、Userとtitleを設定して保存する
gp = Group()
gp.owner = request.user
gp.title = request.POST['group_name']
gp.save()
messages.info(request, '新しいグループを作成しました。')
return redirect(to='/sns/groups')
@login_required(login_url='/admin/login/')
def post(request):
if request.method == 'POST':
gr_name = request.POST['groups']
content = request.POST['content']
group = Group.objects.filter(owner=request.user).filter(title=gr_name).first()
if group == None:
(pub_user,group) = get_public()
msg = Message()
msg.owner = request.user
msg.group = group
msg.content = content
msg.save()
messages.success(request, '新しいメッセージを投稿しました!')
return redirect(to='/sns')
else:
form = PostForm(request.user)
params = {
'login_user':request.user,
'form':form,
}
return render(request, 'sns/post.html', params)
@login_required(login_url='/admin/login/')
def share(request, share_id):
share = Message.objects.get(id=share_id)
if request.method == 'POST':
gr_name = request.POST['groups']
content = request.POST['content']
group = Group.objects.filter(owner=request.user).filter(title=gr_name).first()
if group == None:
(pub_user, group) = get_public()
msg = Message()
msg.owner = request.user
msg.group = group
msg.content = content
msg.share_id = share.id
msg.save()
share_msg = msg.get_share()
share_msg.share_count += 1
share_msg.save()
messages.success(request, 'メッセージをシェアしました!')
return redirect(to='/sns')
form = PostForm(request.user)
params = {
'login_user':request.usre,
'form':form,
'share':share,
}
return render(request, 'sns/share.html',params)
@login_required(login_url='/admin/login/')
def good(request,good_id):
good_msg = Message.objects.get(id=good_id)
is_good = Good.objects.filter(owner=request.user).filter(message=good_msg).count()
if is_good > 0:
messages.success(request, '既にメッセージにはGoodしています。')
return redirect(to='/sns')
good_msg.good_count +=1
good_msg.save()
good = Good()
good.owner = request.user
good.message = good_msg
good.save()
messages.success(request, 'メッセージにGoodしました!')
return redirect(to='/sns')
def get_your_group_message(owner, glist, find):
(public_usre,public_group) = get_public()
groups = Group.objects.filter(Q(owner=owner)|Q(owner=public_user)).filter(title__in=glist)
me_friends = Friend.objects.filter(group__in=groups)
me_users = []
for f in me_friends:
me_users.append(f.user)
his_groups = Group.objects.filter(owner__in=me_users)
his_friends = Friend.objects.filter(user=owner).filter(group__in=his_groups)
me_groups = []
for hf in his_friends:
me_groups.append(hf.group)
if find==None:
messages = Message.objects.filter(Q(group__in=groups)|Q(group__in=me_groups))[:100]
else:
messages = Message.objects.filter(Q(group__in=groups)|Q(group__in=me_groups)).filte(content__contains=find)[:100]
return messages
def get_public():
public_user = User.objects.filter(username='public').first()
public_group = Group.objects.filter(owner=public_user).first()
return (public_user, public_group)
補足情報(FW/ツールのバージョンなど)
python 3.7
Django version 2.2.3
参考書のサンプル通りに書いているつもりなのですが、
エラーが出てしまっている為、ご教授いただけると幸いです。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
djangoもpythonも専門外ですが、
(public_usre,public_group) = get_public()
groups = Group.objects.filter(Q(owner=owner)|Q(owner=public_user)).filter(title__in=glist)
ここではないですか?
最初に public_usre
とスペルミスしてるので次の行の owner=public_user
で未定義エラーになってるんじゃないでしょうか。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.21%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2019/07/11 09:27
ご指摘ありがとうございます!
2019/07/11 14:27 編集
2019/07/13 12:08
ありがとうございました!
2019/07/13 18:34