유저별 게시글 페이지를 볼 때
📌 2023년, 00님은
'#회사원되기' 를 위해 000일동안 노력중입니다!
'#재난에서살아남을수있는체력' 을 위해 000일동안 노력중입니다!
위 정보를 전달할 get api를 작성해보자
urlpatterns = [
...
path('<str:nickname>/', views.TagCalView.as_view()),
]
class TagCalView(APIView):
def get(self, request, nickname):
""" 유저의 목표태그와 달성률 요청 """
user = User.objects.get(nickname=nickname)
tags = user.tag_ids.all() # 유저가 설정한 목표 태그
tag_data =[]
for i in tags:
# 유저가 작성한 게시글중 해당 태그를 가진 것만 필터링
tag_articles = Article.objects.filter(tag_id=i.id, user_id=user.pk)
tag_data.append({i.id: i.tag_name,
"tag_articles": len(tag_articles)})
return Response(tag_data, status=status.HTTP_200_OK)
시리얼라이저 사용해보려고 했는데 실패했다.
시리얼라이저에 tag_ids 값을 담아 보내고 유저가 작성한 게시글중 해당 태그를 가진 것만 필터링 하려고 했는데 해당 user 정보를 어떻게 같이 보내줘야 될 지 모르겠다.
tag_ids값만 가져가서 해당 유저글만이 아닌 태그를 가진 글 전부가 가져와짐
분명 방법이 있을 것 같은데 뭐라 검색해야할 지 모르겠다.
일단 쉬운 방식으로 했다.
이전에 전체 태그정보 api 작성할 때, 프론트엔드분이 원하는 형식이 있어서 이번에는 별도 요청은 없었지만 일단 그 형식 + 새로운 정보 담아서 보내도록 작성했다.
{id: tag_name, “tag_articles”: tag_articles}
처음에 m2m필드를 바로 for문으로 돌리려고 했더니 위 에러가 났다.
...
tags = user.tag_ids
for i in tags:
...
검색해보니 m2m필드는 객체로 반환되어서 all()을 붙여 쿼리셋으로 바꿔줘야한다고 한다.
tags = user.tag_ids.all()
생각해보니 게시물 숫자 = 작성일
이 되려면 하루에 한 태그로 한 개만 작성하도록 해야겠는걸 이건 내일하자
분명 해야할 게 더 있는거 같은데 정리가 잘 안되서 답답하다.