Exemple #1
0
def question_list(request):
    """
    自分の質問を表示する
    """
    # 自分の質問を取ってきて時系列に並べる
    q = Question.objects.filter(questioner=request.user).order_by('date')

    # 各質問の状態を調べる
    q_manager = QAManager(request.user)
    qa_list = q_manager.question_state(q)

    # 自分の質問を時系列に並べる
    qa_list = sorted(qa_list, reverse=True,
                     key=lambda x: x[0].date if isinstance(x[0], Question) else x[0].question.date)

    # プロフィール
    for qa in qa_list:
        if isinstance(qa[0], Question):
            profile = UserProfile.objects.get(user=qa[0].questioner)
        elif isinstance(qa[0], ReplyList):
            profile = UserProfile.objects.get(user=qa[0].question.questioner)
        qa.append(profile)

    histories = None
    return render_to_response('question/top_q.html',
                              {'histories': histories, 'qa_list': qa_list,
                               'last_login': request.user.last_login},
                              context_instance=RequestContext(request))
Exemple #2
0
def question_list(request):
    """
    自分の質問を表示する
    """

    # 自分の質問を取ってきて時系列に並べる
    q = Question.objects.filter(questioner=request.user).order_by('-date')

    # 各質問の状態を調べる
    qa_manager = QAManager(request.user)
    qa_list = qa_manager.question_state(q)

    return render_to_response('question/top_q.html',
                              {'qa_list': qa_list,
                               'last_login': request.user.last_login},
                              context_instance=RequestContext(request))
Exemple #3
0
def top_default(request, msg=None):
    """
    トップページ
    """

    # 自分の質問
    questions = Question.objects.filter(questioner=request.user)
    # 自分宛の質問リスト
    reply_lists = ReplyList.objects.filter(answerer=request.user)

    if request.method == 'POST':
        form = KeywordSearchForm(request.POST)

        """
        以下の質問をキーワード検索で取ってくる
        * 自分がした質問のタイトル・内容・タグいずれかがキーワードと部分一致
        * 相手から自分へ来た質問のタイトル・内容・タグいずれかがキーワードと部分一致
        * 自分の回答内容がキーワードと部分一致
        * 自分の投稿に対する相手の回答内容がキーワードと部分一致
        """
        if form.is_valid():
            keyword = form.clean()['keyword']
            questions, reply_lists = QAManager.search_keyword(user=request.user, keyword=keyword,
                                                              question=True, reply=True, tag=True)
            result = len(questions) + len(reply_lists)
            msg = '「'+keyword+'」の検索結果: '+str(result)+'件'

    # 自分の質問と自分宛ての質問の状態を調べる
    qa_manager = QAManager(request.user)
    questions = qa_manager.question_state(questions)
    reply_lists = qa_manager.reply_state(reply_lists)

    # 自分と自分宛の質問を結合して時系列に並べる
    qa_list = list()
    qa_list.extend(questions)
    qa_list.extend(reply_lists)
    qa_list = QAManager.sort_qa(qa_list=qa_list, reverse=True)

    return render_to_response('question/top_all.html',
                              {'qa_list': qa_list,
                               'last_login': request.user.last_login, 'msg': msg},
                              context_instance=RequestContext(request))
Exemple #4
0
def top_default(request, msg=None):
    """
    トップページ
    """
    # added
    # form = None
    # if request.method == 'GET':
    form = KeywordSearchForm()
    # 自分の質問を取ってくる
    questions = Question.objects.filter(questioner=request.user)
    # 自分宛の質問リストを取ってくる
    reply_lists = ReplyList.objects.filter(answerer=request.user)

    if request.method == 'POST':
        form = KeywordSearchForm(request.POST)

        """
       以下の質問をキーワード検索で取ってくる
       * 自分がした質問のタイトル・内容・タグいずれかがキーワードと部分一致
       * 相手から自分へ来た質問のタイトル・内容・タグいずれかがキーワードと部分一致
       * 自分の回答内容がキーワードと部分一致
       * 自分の投稿に対する相手の回答内容がキーワードと部分一致
       """
        # 自分宛の質問リストを取ってくる(パス含む)
        reply_lists = ReplyList.objects.filter(answerer=request.user)
        if form.is_valid():
            # すべての質問の中からキーワードに合致する質問のみ取り出す
            questions = list(Question.objects.filter(Q(title__contains=form.clean()['keyword']) |
                                                     Q(text__contains=form.clean()['keyword'])))

            # 回答内容にキーワードが含まれるもののうち自分が答えた質問のみ取り出す
            replies = list(Reply.objects.filter(Q(text__contains=form.clean()['keyword'])))

            # キーワードに合致するすべての質問のうち、自分が投稿した質問と、自分に来た質問を取り出す
            q_list_tmp = []
            r_list_tmp = []
            for ql in questions:
                if ql.questioner == request.user:
                    q_list_tmp.append(ql)
                rl = [rl for rl in reply_lists if ql.id == rl.question.id]
                r_list_tmp.extend(rl)

            # 自分の返信内容とキーワードが合致するものを取り出す
            for r in replies:
                if r.answerer == request.user:
                    rl = [rl for rl in reply_lists if r.question.id == rl.question.id]
                    r_list_tmp.extend(rl)
                elif r.question.questioner == request.user:
                    reply_lists = ReplyList.objects.filter(question=r.question)
                    rl = [rl for rl in reply_lists if r.question.id == rl.question.id]
                    r_list_tmp.extend(rl)

            reply_lists = r_list_tmp

            # キーワードに合致するすべてのタグを取り出す
            tags = list(Tag.objects.filter(Q(name__contains=form.clean()['keyword'])))  # キーワードが含まれるタグ(複数)

            # 自分が投稿した質問のタグと一致するもののみ取り出す
            for tag in tags:
                q_tags = QuestionTag.objects.filter(tag=tag)  # タグ名が合致する質問タグ
                q = [q_tag.question for q_tag in q_tags if q_tag.question.questioner == request.user]
                q_list_tmp.extend(q)
                q_list_tmp = list(set(q_list_tmp))
            questions = q_list_tmp

            # 自分が答えた質問のタグと一致するもののみ取り出す
            replies = list(Reply.objects.filter(answerer=request.user))
            for r in replies:
                for tag in tags:
                    q_tags = QuestionTag.objects.filter(tag=tag)  # タグ名が合致する質問タグ
                    q = [q_tag.question for q_tag in q_tags if
                         r.question.id == q_tag.question.id and r.answerer == request.user]
                    q_list_tmp.extend(q)
                    q_list_tmp = list(set(q_list_tmp))

            a = []
            b = []
            r_list_tmp = ReplyList.objects.filter(answerer=request.user)
            for tag in tags:
                q_tags = QuestionTag.objects.filter(tag=tag)  # タグ名が合致する質問タグ
                for rl in r_list_tmp:  # 自分に来た質問
                    for q_tag in q_tags:
                        if rl.question.id == q_tag.question.id:
                            a.append(rl)
                            b = list(set(a))
                            reply_lists.extend(b)

            reply_lists = list(set(reply_lists))

    # 自分の質問と自分宛ての質問の状態を調べる
    qa_manager = QAManager(request.user)
    questions = qa_manager.question_state(questions)
    reply_lists = qa_manager.reply_state(reply_lists)

    # 自分と自分宛の質問を結合して時系列に並べる
    qa_list = list()
    qa_list.extend(questions)
    qa_list.extend(reply_lists)
    qa_list = sorted(qa_list, reverse=True,
                     key=lambda x: x[0].date if isinstance(x[0], Question) else x[0].question.date)

    # プロフィール
    for qa in qa_list:
        if isinstance(qa[0], Question):
            profile = UserProfile.objects.get(user=qa[0].questioner)
        elif isinstance(qa[0], ReplyList):
            profile = UserProfile.objects.get(user=qa[0].question.questioner)
        qa.append(profile)
    histories = None
    return render_to_response('question/top_all.html',
                              {'histories': histories, 'qa_list': qa_list,
                               'last_login': request.user.last_login, 'msg': msg},
                              context_instance=RequestContext(request))