def write_before(request, match_id): match = get_object_or_404(Match, id=match_id) gk_players = PlayerSeason.objects.filter(position='GK') df_players = PlayerSeason.objects.filter(position='DF') mf_players = PlayerSeason.objects.filter(position='MF') fw_players = PlayerSeason.objects.filter(position='FW') if request.method == 'POST': for a in range(12): if a == 0: if not request.POST.get('strategy'): messages.error(request, '전술을 선택하셔야 합니다.') return HttpResponseRedirect( reverse('board_free:write_before', args=[match.id])) elif a > 0: if not request.POST.get('player' + str(a)): messages.error(request, '선수 11명을 전부 입력해주셔야 합니다.') return HttpResponseRedirect( reverse('board_free:write_before', args=[match.id])) post = FreeBoard.objects.create(sort='before', title=request.POST.get('title', ), body=value(request.POST.get('body', )), user=request.user, before_game_review=match) before_review_list = [] for a in range(12): if a == 0: before_review_list.append( BeforeReview(freeboard=post, match=match, user=request.user, sort=str(a), strategy=request.POST.get('strategy'))) elif a > 0: before_review_list.append( BeforeReview(freeboard=post, match=match, user=request.user, sort=str(a), player=PlayerSeason.objects.get( id=request.POST.get('player' + str(a))))) BeforeReview.objects.bulk_create(before_review_list) # 태그 함수 (object의 tag들, object, 요청한 유저, raw_data(없으면 빈 list)- queryset 도 순수 list 로 변환해주어야 함) tags = request.POST.get('tags', None) tag(tags, post, request.user, 'free', []) # 포인트 함수 point(request.user, 'review') return HttpResponseRedirect( reverse('board_free:detail', args=[post.id, post.slug])) forms = FreeBoardForm() return render( request, 'board/choice_write/write/write_before.jinja', { 'match': match, 'forms': forms, 'gk_players': gk_players, 'df_players': df_players, 'mf_players': mf_players, 'fw_players': fw_players })
def write_free(request): if request.method == 'POST': post = FreeBoard.objects.create(sort='free', title=request.POST.get('title', ), body=value(request.POST.get('body', )), user=request.user) # 태그 함수 (object의 tag들, object, 요청한 유저, raw_data(없으면 빈 list)- queryset 도 순수 list 로 변환해주어야 함) tags = request.POST.get('tags', None) tag(tags, post, request.user, 'free', []) # 포인트 함수 point(request.user, 'free') return HttpResponseRedirect( reverse('board_free:detail', args=[post.id, post.slug])) else: forms = FreeBoardForm() return render(request, 'board/choice_write/write/write_free.jinja', {'forms': forms})
def input_game_result(request, match_id): match_game = Match.objects.get(id=match_id) players = PlayerSeason.ing.filter(team__name='Arsenal') field_players = { 'gk_players': players.filter(position='GK'), 'df_players': players.filter(position='DF'), 'mf_players': players.filter(position='MF'), 'fw_players': players.filter(position='FW') } # match_id 가 있다는 것은 관리자가 경기 결과를 입력하였다는 것이다. if request.method == 'POST': if match_game.result: messages.error(request, '현재 결과가 등록 되어있는 경기 입니다.') return HttpResponseRedirect( reverse('administrator:input_game_result')) else: aa = 0 while aa < 11: aa += 1 player = request.POST.get('player' + str(aa), None) if not player: messages.error(request, '선발 라인업을 다시 구성해주시기 바랍니다.') return HttpResponseRedirect( reverse('administrator:input_game_result')) forms = MatchForm(instance=match_game, data=request.POST) if forms.is_valid(): game_result = forms.save(commit=False) if game_result.result == 'win': if game_result.home_score > game_result.away_score: game_result.save() try: users = EventVote.objects.filter( match=match_id, home_score=game_result.home_score, away_score=game_result.away_score) except EventVote.DoesNotExist: pass else: for user in users: # 포인트 함수 point(user, 'correct_vote') user.is_result = True user.save(update_fields='is_result') else: messages.error(request, '스코어가 잘못 입력되었습니다. 다시 한번 확인부탁드립니다.') return HttpResponseRedirect( reverse('administrator:input_game_result')) elif game_result.result == 'draw': if game_result.home_score == game_result.away_score: game_result.save() else: messages.error(request, '스코어가 잘못 입력되었습니다. 다시 한번 확인부탁드립니다.') return HttpResponseRedirect( reverse('administrator:input_game_result')) elif game_result.result == 'lose': if game_result.home_score < game_result.away_score: game_result.save() else: messages.error(request, '스코어가 잘못 입력되었습니다. 다시 한번 확인부탁드립니다.') return HttpResponseRedirect( reverse('administrator:input_game_result')) return HttpResponseRedirect( reverse('administrator:input_game_result')) forms = MatchForm() return render( request, 'admin/sub_main/input_game_result.jinja', { 'match': match_game, 'forms': forms, 'players': players, 'gk_players': field_players['gk_players'], 'df_players': field_players['df_players'], 'mf_players': field_players['mf_players'], 'fw_players': field_players['fw_players'] })
def write_after(request, match_id): match = get_object_or_404(Match, id=match_id) match_player = [ match.player1, match.player2, match.player3, match.player4, match.player5, match.player6, match.player7, match.player8, match.player9, match.player10, match.player11, match.player12, match.player13, match.player14 ] if request.method == 'POST': for a in range(1, 15): if match_player[a - 1]: string = request.POST.get('player' + str(a) + '_review') if no_space_text(string) <= 10: messages.error(request, '모든 출천 선수에 대해 10글자 이상 리뷰를 입력해주셔야 합니다.') return HttpResponseRedirect( reverse('board_free:write_after', args=[match.id])) post = FreeBoard.objects.create(sort='after', title=request.POST.get('title', ), body=value(request.POST.get('body', )), user=request.user, after_game_review=match) after_review_list = [] for i in range(15): if i == 0: after_review_list.append( AfterReview(freeboard=post, match=match, sort=str(i), point=request.POST.get('team_point'), user=request.user, is_simple=False)) if i > 0: if match_player[i - 1]: after_review_list.append( AfterReview(freeboard=post, match=match, sort=str(i), player=match_player[i - 1], user=request.user, point=request.POST.get('player' + str(i) + '_point'), review=request.POST.get('player' + str(i) + '_review'), is_simple=False)) else: after_review_list.append( AfterReview(freeboard=post, match=match, sort=str(i), user=request.user, is_simple=False)) AfterReview.objects.bulk_create(after_review_list) # 태그 함수 (object의 tag들, object, 요청한 유저, raw_data(없으면 빈 list)- queryset 도 순수 list 로 변환해주어야 함) tags = request.POST.get('tags', None) tag(tags, post, request.user, 'free', []) # 포인트 함수 point(request.user, 'review', 'after') return HttpResponseRedirect( reverse('board_free:detail', args=[post.id, post.slug])) forms = FreeBoardForm() return render(request, 'board/choice_write/write/write_after.jinja', { 'match': match, 'match_player': match_player, 'forms': forms })
def detail(request, id, slug, comment_id=None): post = get_object_or_404(FreeBoard, id=id, slug=slug) if post.sort == 'before': post_before = BeforeReview.objects.filter( match=post.before_game_review).order_by('id') elif post.sort == 'after': post_after = AfterReview.objects.filter( match=post.after_game_review).order_by('id') # 댓글과 대댓글을 comments_list list 에 담음 comments_list = [] ct = ContentType.objects.get_for_model(post) comments = Comment.objects.filter(content_type=ct, object_id=post.id, comment__isnull=True, is_active=True).order_by('created', ) for comment in comments: comments_list.append(comment) if comment.comment_set: for sub_comment in comment.comment_set.all().order_by('created', ): comments_list.append(sub_comment) # 댓글과 대댓글 입력 if request.method == 'POST': # comment_id 가 있다는 것은 대댓글 if comment_id: comment_to = Comment.objects.get(id=comment_id) if comment_to.comment: post.comments.create(user=request.user, sort='free-co', content=request.POST.get('content'), comment=comment_to.comment, commenting_user=str(comment_to.user)) else: post.comments.create(user=request.user, sort='free-co', content=request.POST.get('content'), comment=comment_to, commenting_user=str(comment_to.user)) # 대댓글을 남긴 대상이 자신이 아닐 경우 and 댓글 user 과 post user 이 다르다면 댓글로 Action 생성 if comment_to.user != request.user and comment_to.user != post.user: Action.objects.create(content_object=post, sort='comment', user=request.user, to_user=comment_to.user, comment=comment_to) else: post.comments.create(user=request.user, sort='free-co', content=request.POST.get('content')) #Action.objects.create(content_object=comment, sort='free-co', user=request.user) # action 은 아직 미구현 # post 의 작가가 자신이 아니라면 Action 생성 if post.user != request.user: Action.objects.create(content_object=post, sort='post', user=request.user, to_user=post.user) # 포인트 함수 point(request.user, 'comment') return HttpResponseRedirect( reverse('board_free:detail', args=[post.id, post.slug])) # paging 함수 (게시물 분리, 상품, request.GET, 'page', 처음 보여질 페이지, 한페이지에 보여질 수, 보여질 토탈 페이징) paging = paginator(comments_list, request.GET, 'page', 'last', 10, 10) is_action = Action.objects.filter(to_user=request.user, content_type=ct, object_id=post.id, is_confirm=False, created__gte=timezone.now() - relativedelta(days=7)) if is_action: for action in is_action: action.is_confirm = True action.save(update_fields=['is_confirm']) if post.sort == 'before': context_dict = { 'post_before': post_before, 'post': post, 'paging': paging } elif post.sort == 'after': context_dict = { 'post_after': post_after, 'post': post, 'paging': paging } else: context_dict = {'post': post, 'paging': paging} return render(request, 'board/detail.jinja', context_dict)