【问题标题】:Building a custom filter for my tastypi resource为我的美味皮资源构建自定义过滤器
【发布时间】:2014-09-18 15:58:16
【问题描述】:

我有这个工作代码可以从我在测试 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 资源中?

【问题讨论】:

    标签: python django rest tastypie


    【解决方案1】:

    大家好,我们在#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)
    

    【讨论】:

    • 再次嗨 :-) 所以这不适用于 django ORM 方法?我必须做一个自定义过滤器吗?
    猜你喜欢
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 2014-12-01
    • 1970-01-01
    相关资源
    最近更新 更多