我想再搜索多列。我为此目的使用了DjangoFilterBackend。这个包使用
http://localhost:8000/api/v1/contacts/?first_name=Clair&last_name=Test
我想将此模式自定义为
http://localhost:8000/api/v1/contacts/?query[first_name]=Clair&query[last_name]=Test
如何自定义DjangoFilterBackend?
提前致谢。
答案 0 :(得分:0)
这是一个黑客;但是如果需要,可以创建支持此URL方案的自定义BaseFilterSet
。您需要从查询格式转换为FilterSet期望的字段格式;意思是将query[first_name]
更改为first_name
这样的事可能有用:
import re
from django_filters.filterset import BaseFilterSet
class CustomParamFilterSet(BaseFilterSet):
PARAM_REGEX = 'query\[(\w+)\]'
def __init__(self, data=None, queryset=None, prefix=None, strict=None, request=None):
d = self.translate_data(data)
super(CustomParamFilterSet, self).__init__(d, queryset, prefix, strict, request)
@classmethod
def translate_data(cls, data):
regexp = re.compile(cls.PARAM_REGEX)
d = dict()
for k, v in data.iteritems():
match = regexp.match(k)
if match:
new_k = match.group(1)
d[new_k] = v
else:
pass # Handle errors here
return d