inflearn logo
강의

Course

Instructor

Django REST Framework Essentials

When you only want to send numbers

유저 1명이 1개의 게시글에 좋아요를 누를 경우

Resolved

356

enjoyzerocoke

7 asked

0

안녕하세요 선생님 강의 매우 재밌게 듣고 있습니다.

커리큘럼 3-3 숫자만 보내고 싶을 때를 수강 하고 난 후, 게시글은 1명의 유저가 1개의 좋아요를 보내고 이미 보냈다면 취소가 되어야 될 것 같다는 생각에 코드를 수정 하고 있었는데요.

사실, 모델링 부분에서 건들지 않으면 위 사항은 자바스크립트의 로컬스토리지나 세션의 개념이 아니고서야 처리가 안될 것 같다는 생각이 드는데, 선생님은 어떻게 생각 하시나요?

만약 모델링을 수정 하고, 위 기능을 고려 한다면 이렇게 접근 할 것 같습니다.

  1. 좋아요 체크 여부 Boolean 필드 생성

  2. 해당 게시글에 좋아요를 누른 경우

제가 생각한 접근 방식을 보시고, 선생님의 노하우를 공유 해주셨으면 합니다 감사합니다.

django rest-api

Answer 1

1

bestdjango

안녕하세요. 독자님.

게시글에 댓글을 단 사람을 저장하는 User 테이블이 필요해 보입니다.

특정 게시글에 대해서, 동일한 사람이 처음 누르면 댓글 카운트를 +1 하고,

두번째 누르면 -1 하는 로직은 어떨까요 ?

이를 위해 Post : User 테이블간 관계를 N : N 으로 하면 되겠구요.

시도해보면 좋은 경험이 될 것으로 보입니다. 화이팅하세요.

0

enjoyzerocoke

views.py snippets

    @action(detail=True, methods=["patch"], name="like")
    def like(self, request, pk=None):
        """게시물 좋아요 버튼 클릭 했을 때 액션"""
        post = self.get_object()
        user = request.user

        if post.like_people.filter(id=user.id).exists():
            post.like_people.remove(user.id)
            post.like -= 1
        else:
            post.like_people.add(user.id)
            post.like += 1

        post.save()
        return Response(status=status.HTTP_200_OK)

models.py

class Post(models.Model):
    writer = models.ForeignKey(CustomUser, on_delete=models.CASCADE, help_text="작성자")
    title = models.CharField(max_length=500, help_text="제목")
    content = models.TextField(help_text="내용")
    image = models.ImageField(
        upload_to="post/%Y/%m/", blank=True, null=True, help_text="이미지 업로드"
    )
    like = models.PositiveSmallIntegerField(default=0, help_text="좋아요")
    like_people = models.ManyToManyField(
        CustomUser, related_name="like_people", help_text="좋아요를 누른 사람들"
    )
    created_at = models.DateTimeField(auto_now_add=True, help_text="생성 일자")
    updated_at = models.DateTimeField(auto_now=True, help_text="수정 일자")

안녕하세요 선생님! 선생님께서 말씀 하신 부분 고려해서 수정 하고 코드 공유 목적으로 올리겠습니다!

ViewSet에서 update를 오버라이딩 하는게 나았을까요? 아니면, 지금 처럼 action 데코레이터로 기능을 감싸는게 나았을까요?

1

bestdjango

Very good. 코드 좋아 보입니다. action 사용여부는 익숙한 거 사용하면 되겠지요. 수고했습니다.

블로그 첫 화면이 안 나옵니다.

0

317

3

INSTALLED_APPS 순서

0

246

1

vscode 실행안됨

0

667

3

django venv activate 하고 나서 vue 서버도 실행 해야 하나요?

0

367

2

더 공부할게있을까요

0

369

1

용어에 대해 문의 드립니다.

0

283

2

like 기능을 위한 overriding 문의

0

322

1

코드 최적화 과정

0

364

1

프로잭트를 생성하고 runserver하면 ModuleNotFoundError: No module named 발생해요

0

894

4

GET Method 에서 왜 Like 수를 증가시키는지 궁금합니다.

0

376

1

CSRF Token에 대한 질문입니다.

0

609

1

ModuleNotFoundError: No module named 'rest_framework django' 오류

0

3037

1

앱을 구성할 때 api 앱과 blog 앱을 나누어서 구성하는 이유가 궁금합니다ㅜ

1

472

2

to_representation() 오버라이딩 질문입니다.

0

496

3

공부 순서에 관해 질문드립니다.

0

360

1

CateTagAPIView에서 get 메소드

1

309

2

깃헙 페이지를 보고싶어요

0

230

1

디버거 관련 질문입니다.

0

277

3

가장 마지막강의 (Generic View -> ViewSet migration) 질문입니다.

0

223

1

PostCommentListAPIView(게시물 댓글 조회 api) 관련 질문

0

211

1

댓글 보기 및 삭제 api

0

280

1

post, comment crud 질문

0

228

4

CateTagSerializer 질문입니다!

3

336

3

The serializer field might be named incorrectly and not match any attribute or key on the `User` instance.

0

840

1