我有以下工作代码可以从测试URL中使用常规GET请求测试的列表中筛选出:
tag_list = request.GET.get('tag_list').split('&')
tags = Tag.objects.all()
all_species = Species.objects.all()
filtered_species = [all_species.filter(tags__description=c) for c in tag_list]
species = reduce(and_, filtered_species, all_species)
请求将如下所示:
/?tag_list=winged fruit&latex present&foo&bar
如何或在哪里将其作为自定义过滤器添加到我的api资源?
最佳答案
大家好,我们见过#tastypie。
那是一个有趣的问题,将在这里再次回答可能对其他人有用。
首先,您的网址应采用以下形式:
/?tag_list=winged%20fruit&tag_list=latex%20present&tag_list=foo&tag_list=bar
然后要访问请求中的
tag_list
,您必须使用特殊方法getlist
:request.GET.getlist('tag_list')
编辑:
我将以这种方式实现查询,但可能可以改进此解决方案:
tag_phrases = request.GET.getlist('tag_list')
# Create OR query based on `tag_phrases`
query = Q(tags__description=tag_phrases[0])
for index, tag_phrase in tag_phrases:
if index == 0:
continue
query |= Q(tags__description=tag_phrase)
species = Species.objects.filter(query)
# Some of species might be duplicated
species = set(species)
关于python - 为我的tastypi资源构建自定义过滤器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25917335/