我有以下工作代码可以从测试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/

10-10 11:45