9.[Django] 필터 추가하기

필터

  • 필터링할 땐 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()