Creating reusable "filter_by_tags" function.
Moving the filtering-by-tag logic out of TagsFilter into a reusable function.remotes/origin/enhancement/email-actions
parent
e1fdc36301
commit
9bca29ce20
|
@ -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
|
||||||
|
|
|
@ -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])
|
Loading…
Reference in New Issue