inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Các điểm chính của Django REST Framework

Khi bạn chỉ muốn gửi số

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

Đã giải quyết

356

enjoyzerocoke

7 câu hỏi đã được viết

0

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

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

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

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

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

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

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

django rest-api

Câu trả lời 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

337

3

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

0

841

1