django-taggit-serializer

김혁준·2023년 6월 21일
0

django

목록 보기
10/18
  1. models.py에 추가
tags = TaggableManager(
        blank=True,
    )
  1. drf에 적용하기(serializer에 적용하기) : django-taggit-serializer 설치
from taggit.serializers import TagListSerializerField, TaggitSerializer

class ArticleSerializer(TaggitSerializer, serializers.ModelSerializer):
    tags = TagListSerializerField(required=False)
    is_author = serializers.SerializerMethodField()
    likes_count = serializers.SerializerMethodField()

    class Meta:
        model = Article
        fields = [
            ...
            "tags",
            ...
        ]
  1. 프론트에서 유저가 사과,배,감귤 이런식으로 입력하면 장고에는 ["사과","배","감귤"]이렇게 저장된다.
  2. 태그 클릭하면 해당하는 게시글 가져오기
class TagSearchView(APIView):
    def get(self, request):
        tag_condition = request.query_params.get("tag", None)
        tag_list = Tag.objects.filter(name__contains=tag_condition)
        serializer = TagSerializer(tag_list, many=True)
        return Response(serializer.data, status=status.HTTP_200_OK)

: django-orm과 적절히 섞어서 쓰기

  1. TagSerializer 설정 :
class TagSerializer(serializers.ModelSerializer):
    article_count = serializers.SerializerMethodField()

    def get_article_count(self, obj):
        return obj.taggit_taggeditem_items.count()

    class Meta:
        model = Tag
        fields = "__all__"

: view.py에서 통과시켜줄때 시리얼라이저는 일반 모델시리얼라이저. but 모델은 taggit에서 미리 만들어둔 Tag모델을 적용해야한다. 안그러면 json형식으로 안바뀜.

  1. 공식문서에 있는 taggit 전용 orm을 읽어보자
target_article = Article.objects.filter(tags__name__in=[target_tag])

살짝 다르다.

결론 : 알면 drf에서도 쉽게 taggit을 적용할 수 있다.
공식문서 : https://readthedocs.org/projects/django-taggit/downloads/pdf/latest/

profile
스프링 개발자 지망생입니다

0개의 댓글