필터
- 필터링할 땐 Q를 쓰거나 filters를 사용합니다
- 개인적으론 Q가 좀 더 간편하게 작성 가능해서 선호합니다만 filter도 알아두면 다른 사람들이 짠 코드를 이해할 수 있습니다
- 보통 filters 파일을 따로 만들어서 보관하지만 그래도 코드가 좀 더 길고 장황한 느낌입니다.
filters.py
import django_filters as filters
from articles.models import Article
class ArticleFilter(fitlers.FilterSet):
author = filters.CharFilter(
field_name="author__first_name", lookup_expr="icontains"
)
title = filters.CharFilter(field_name="title", lookup_expr="icontains")
tags = filters.CharFilter(
field_name = "tags", method="get_article_tags", lookup_expr="iexact"
)
created = filters.IsoDateTimeFilter(field_name="created")
updated = filters.IsoDateTimeFilter(field_name="updated")
class Meta:
model = Article
fields = ["author", "title", "tags", "created", "updated"]
def get_article_tags(self, queryset, tags, value):
tag_values = value.replace(" ", "").split(",")
return queryset.filter(tags__tag__in=tag_values).distinct()