Creating reusable "filter_by_tags" function.

Moving the filtering-by-tag logic out of TagsFilter into a reusable function.
remotes/origin/enhancement/email-actions
Anler Hp 2014-05-20 16:08:37 +02:00 committed by David Barragán Merino
parent e1fdc36301
commit 9bca29ce20
2 changed files with 12 additions and 4 deletions

View File

@ -19,6 +19,8 @@ from django.db.models import Q
from rest_framework import filters from rest_framework import filters
from taiga.base.utils.db import filter_by_tags
class QueryParamsFilterMixin(object): class QueryParamsFilterMixin(object):
_special_values_dict = { _special_values_dict = {
@ -94,8 +96,6 @@ class IsProjectMemberFilterBackend(FilterBackend):
class TagsFilter(FilterBackend): class TagsFilter(FilterBackend):
FILTER_TAGS_SQL = "unpickle({table}.tags) && %s"
def __init__(self, filter_name='tags'): def __init__(self, filter_name='tags'):
self.filter_name = filter_name self.filter_name = filter_name
@ -108,7 +108,6 @@ class TagsFilter(FilterBackend):
def filter_queryset(self, request, queryset, view): def filter_queryset(self, request, queryset, view):
tags = self._get_tags_queryparams(request.QUERY_PARAMS) tags = self._get_tags_queryparams(request.QUERY_PARAMS)
if tags: if tags:
where_sql = self.FILTER_TAGS_SQL.format(table=view.model._meta.db_table) queryset = filter_by_tags(tags, queryset)
queryset = queryset.extra(where=[where_sql], params=[tags])
return queryset return queryset

9
taiga/base/utils/db.py Normal file
View File

@ -0,0 +1,9 @@
FILTER_TAGS_SQL = "unpickle({table}.tags) && %s"
def filter_by_tags(tags, queryset):
"""Filter a queryset of a model with pickled field named tags, by tags."""
table_name = queryset.model._meta.db_table
where_sql = FILTER_TAGS_SQL.format(table=table_name)
return queryset.extra(where=[where_sql], params=[tags])