Exemple #1
0
def write_post(request):
    pages = int(request.POST.get('pages', 1))  # 현재 페이지
    kwd = str(request.GET.get('kwd', ''))  # 검색어
    # 공통 파라미터 --------------------------------------------------------------

    # 로그인 확인
    authuser = request.session['authuser']
    if authuser is None:
        return HttpResponseRedirect('/board')

    board = Board()
    board.user_id = authuser['id']
    board.title = request.POST['title']
    board.content = request.POST['content']

    # 스크립트를 무시하고 잘못된 정보를 줬을 때
    if board.title == '':
        return HttpResponseRedirect('/board')
    if board.content == '':
        return HttpResponseRedirect('/board')

    # 부모id가 있으면 답글
    parentno = int(request.POST.get('parentno', -1))

    if parentno == -1:
        # groupno : 답글이 아니면 (Max+1)
        value = Board.objects.aggregate(max_groupno=Max('groupno'))
        max_groupno = 0 if value['max_groupno'] is None else value[
            'max_groupno']
        board.groupno = max_groupno + 1

        # orderno : 답글이 아니면 항상 1
        board.orderno = 1

        # depth : 답글이 아니면 항상 0
        board.depth = 0
    else:
        # 답글이면 일단 부모 객체를 가져온다
        parents = Board.objects.get(id=parentno)

        # groupno : 답글이면 부모것과 같게
        board.groupno = parents.groupno

        # orderno : 답글이면 (부모것+1) 보다 크거나 같은거 모두 (+1)해서 밀고 (부모것+1)
        board.orderno = parents.orderno + 1
        Board.objects.filter(groupno=board.groupno).filter(
            orderno__gte=board.orderno).update(orderno=F('orderno') + 1)

        # depth : 답글이면 (부모것+1)
        board.depth = parents.depth + 1

        # parentno : 답글이면 부모번호
        board.parentno = parentno

    board.save()

    return HttpResponseRedirect('/board')