tags = TaggableManager(
blank=True,
)
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",
...
]
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과 적절히 섞어서 쓰기
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형식으로 안바뀜.
target_article = Article.objects.filter(tags__name__in=[target_tag])
살짝 다르다.
결론 : 알면 drf에서도 쉽게 taggit을 적용할 수 있다.
공식문서 : https://readthedocs.org/projects/django-taggit/downloads/pdf/latest/