def reply_edit(request, id=None): """ 返信ページ """ # 指定された質問を取ってくる q = get_object_or_404(Question, pk=id) if q.is_closed: return top_default(request, msg=m.INFO_REPLY_ALREADY_FINISH) replylist = get_object_or_404(ReplyList, question=q, has_replied=False) r = Reply() # edit if request.method == 'POST': form = ReplyEditForm(request.POST, instance=r) if form.is_valid(): if q.questioner != request.user: # 回答した質問の制限時間をNoneにしておく r_list = get_object_or_404(ReplyList, question=q, answerer=request.user) if r_list.has_replied: return top_default(request, msg=m.INFO_QUESTION_ALREADY_AUTO_PASS) r_list.update(time_limit_date=None) # 回答した人に、質問のタグを付加する tag_list = QuestionTag.objects.filter(question=q) for tag in tag_list: if not UserTag.objects.filter(user=request.user, tag=tag.tag): UserTag.objects.create(tag=tag.tag, user=request.user) r = form.save(commit=False) r.update(question=q, answerer=request.user, draft=form.cleaned_data['draft']) return top_default(request, msg=m.INFO_REPLY_SEND_OK) pass # new else: form = ReplyEditForm(instance=r) return render_to_response('question/reply_edit.html', {'form': form, 'question': q, 'id': id, 'replylist': replylist}, context_instance=RequestContext(request))
def search_replylist_by_keyword_extra(keyword, questioner, answerer): """ キーワードに合致する回答のうち、自分の回答、または自分が投稿した質問の回答に関連づいた質問のReplyListのみ取り出す """ replies = Reply.search_by_keyword(keyword=keyword) r_list = [] for r in replies: if r.answerer == answerer: reply_lists = ReplyList.objects.filter(answerer=answerer) rl = [rl for rl in reply_lists if r.question.id == rl.question.id] r_list.extend(rl) elif r.question.questioner == questioner: reply_lists = ReplyList.objects.filter(question=r.question) rl = [rl for rl in reply_lists if r.question.id == rl.question.id] r_list.extend(rl) return list(set(r_list))
def question_pass(request, id=None): """ 来た質問をパスする。 次に質問を回す人は、質問者と既にパスした人にはならないようにする。 また、質問者以外のユーザを質問が回り終わったら、質問者にお知らせする。 """ reply_list = ReplyList.objects.get(id=id) if reply_list.has_replied: msg = 'すでにパスした質問です。' return top_default(request, msg) qa_manager = QAManager() if qa_manager.pass_question(reply_list.question, qa_manager.reply_list_update_random_except): msg = '質問をパスしました。' # 何回目のパスでロボットが返信してくるか if reply_list.question.pass_counter() == 1 and not reply_list.question.has_reply(): reply = Reply() reply.question = reply_list.question reply_data = ReplyRobot().reply(reply_list.question) if len(reply_data['reply_list']) == 0: reply.text = "難問です。答えられたらすごいです。" else: reply.text = "以下のページはどうでしょうか?\n\n" + "\n".join(reply_data['reply_list']) if len(reply_data['word_list']) != 0: reply.text += "\n\n抽出結果:" + "、".join(reply_data['word_list']) reply.text += "\n推定ジャンル:" + reply_data['genre'] # ロボットのidを指定 reply.answerer = User.objects.get(id=1) reply.save() return top_default(request, msg) else: reply_list.question.is_closed = True reply_list.question.save() msg = '質問をパスしました。\n' msg += '次の送信先がないため質問は締め切られます。' return top_default(request, msg)
def reply_edit(request, id=None): """ 返信ページ """ # 指定された質問を取ってくる q = get_object_or_404(Question, pk=id) # if ReplyList.objects.filter(question=q, answerer=request.user, has_replied=True): # msg = 'その質問はすでにパスされています' # return render_to_response('question/top_default.html',{'msg':msg},context_instance=RequestContext(request)) if q.is_closed: msg = 'その質問の回答は締め切られました。' return top_default(request, msg) # return render_to_response('question/top_default.html',{'msg':msg},context_instance=RequestContext(request)) # replylist = ReplyList.objects.filter(question=q)[0] # 各質問について、has_replied=Falseの回答済みリストは一つのみのはず replylist = get_object_or_404(ReplyList, question=q, has_replied=False) print("rep") r = Reply() # edit if request.method == 'POST': form = ReplyEditForm(request.POST, instance=r) # 完了がおされたら if form.is_valid(): # この質問の自分あての回答リストを取ってきて、回答済みにしておく if q.questioner != request.user: r_list = get_object_or_404(ReplyList, question=q, answerer=request.user) # has_replied=Falseはいらないと思う if r_list.has_replied: msg = 'その質問は自動的にパスされました' return top_default(request, msg) # r_list.has_replied = True r_list.time_limit_date = None r_list.save() tag_list = QuestionTag.objects.filter(question=q) for tag in tag_list: if not UserTag.objects.filter(user=request.user, tag=tag.tag): user_tag = UserTag() user_tag.tag = tag.tag user_tag.user = request.user user_tag.save() print(user_tag) r = form.save(commit=False) r.question = q r.answerer = request.user r.draft = form.cleaned_data['draft'] r.save() # 質問を締め切る # q.is_closed = True # q.save() msg = '返信しました。' return top_default(request, msg) pass # new else: form = ReplyEditForm(instance=r) return render_to_response('question/reply_edit.html', {'form': form, 'question': q, 'id': id, 'replylist': replylist}, context_instance=RequestContext(request))