[점프 투 장고] 정렬기능 만들어 보기 에러

안녕하세요

쭉 잘 따라 오다가 질문 목록화면에 정렬 조건 추가하기에서
{% if so == 'recent' %} 에서 두번째 = 빨간색으로 뜨면서 ... 프론트는 만들어 지는데 실제 결과 값이 나오질 않고 그대로 최신순으로 만 보여집니다.

    <div class="col-2">
        <select class="form-control so">
            <option value="recent" {% if so == 'recent' %}selected{% endif %}>Latest</option>
            <option value="recommend" {% if so == 'recommend' %}selected{% endif %}>Like</option>
            <option value="popular" {% if so == 'popular' %}selected{% endif %} >Popular</option>
        </select>
    </div>

            <script type="text/javascript" >
$(document).ready(function(){
    $(".page-link").on('click', function() {
        $("#page").val($(this).data("page"));
        $("#searchForm").submit()
    });

    $("#btn_search").on('click', function(){
        $("#kw").val($(".kw").val());
        $("#page").val(1);
        $("#searchForm").submit();
    });

    $(".so").on('change', function() {
        $("#so").val($(this).val());
        $("#page").val(1);
        $("#searchForm").submit();
    });
});


{% endblock %}


def index(request):
# 입력인자
page = request.GET.get('page', '1')
kw = request.GET.get('kw','')
so = request.GET.get('so','recent')

#정렬
if so == 'recommend':
    question_list = Question.objects.annotate(num_voter=Count ('voter')).order_by('-num_voter', '-create_date')  
elif so == 'popular': 
    question_list = Question.objects.annotate(num_answer=Count('answer')).order_by('-num_answer', '-create_date')
else:
    question_list= Question.objects.order_by('-create_date')

------------------------------------------------------------
question_list = Question.objects.order_by('-create_date')
if kw:
    question_list = question_list.filter(
        Q(subject__icontains=kw)|
        Q(content__icontains=kw)|
        Q(author__username__icontains=kw)|
        Q(answer__author__username__icontains=kw)
    ).distinct()



paginator= Paginator(question_list, 10)
page_obj=paginator.get_page(page)
max_index = len(paginator.page_range)

context = {'question_list':page_obj,'max_index':max_index,'page':page, 'kw': kw,'so':so}
return render(request, 'pybo/question_list.html',context)

def detail(request, question_id):
question = get_object_or_404(Question, pk=question_id)
context = {'question': question}
return render(request, 'pybo\question_detail.html', context)

dongsoon 580

2022년 8월 21일 10:06 오후

index 함수에 넘어오는 so 값을 출력해서 확인해 보세요. - 박응용님, 2022년 8월 21일 10:43 오후 추천 , 대댓글
@박응용님 함수 아래 if so == 'recommend': question_list = Question.objects.annotate(num_voter=Count ('voter')).order_by('-num_voter', '-create_date') elif so == 'popular': question_list = Question.objects.annotate(num_answer=Count('answer')).order_by('-num_answer', '-create_date') else: question_list= Question.objects.order_by('-create_date') return HttpResponse(so) 이렇게 하고 리스트 화면 메뉴에서 인기, 추천 등 메뉴를 선택하면 주소창에 http://127.0.0.1:8000/?kw=&page=1&so=recommend 되고 화면에 recommend 등 선택한 메뉴에 단어가 표시됩니다 - dongsoon님, 2022년 8월 22일 8:14 오전 추천 , 대댓글
목록으로
2개의 답변이 있습니다. 1 / 1 Page

함수 아래

if so == 'recommend':
question_list = Question.objects.annotate(num_voter=Count ('voter')).order_by('-num_voter', '-create_date')
elif so == 'popular':
question_list = Question.objects.annotate(num_answer=Count('answer')).order_by('-num_answer', '-create_date')
else:
question_list= Question.objects.order_by('-create_date')
return HttpResponse(so)

     이렇게 하고 리스트 화면 메뉴에서 인기, 추천 등 메뉴를 선택하면  주소창에 
     http://127.0.0.1:8000/?kw=&page=1&so=recommend 되고

     화면에 recommend 등 선택한 메뉴에 단어가 표시됩니다.

dongsoon

2022년 8월 22일 8:12 오전

if else 문 밑에 추가로 아래 문장이 또 있는건 아닌가요?

question_list = Question.objects.order_by('-create_date')

이러면 if else로 만든 question_list가 덮어써져 의미가 없게 됩니다.

박응용

2022년 8월 22일 9:00 오전

크...... 제가 조회 먼저따라하고 정렬 만들어서 ..아래 조회에 question_list 지워주는걸 까먹었습니다. 감사합니다. - dongsoon님, 2022년 8월 22일 12:31 오후 추천 , 대댓글