Django 为什么可以';我是否在TastyPie高级过滤器定义中将自定义键/值对添加到orm_过滤器?

Django 为什么可以';我是否在TastyPie高级过滤器定义中将自定义键/值对添加到orm_过滤器?,django,tastypie,Django,Tastypie,在下面提供的示例中:我在提供的示例代码中遇到了一个问题 我有以下高级过滤器定义: def build_filters(self, filters=None): if filters is None: filters = {} orm_filters = super(TaggedResource, self).build_filters(filters) if('query' in filters):

在下面提供的示例中:我在提供的示例代码中遇到了一个问题

我有以下高级过滤器定义:

def build_filters(self, filters=None):
        if filters is None:
            filters = {}

        orm_filters = super(TaggedResource, self).build_filters(filters)

        if('query' in filters):
            query = filters['query']
            print query
            qset = (
                    Q(comment__icontains=query) |
                    Q(media_text__icontains=query)
                    )
            orm_filters.extend({'custom': qset})
我遇到的问题是orm_过滤器是一个dict映射,而不是一个列表。因此,我得到了一个错误:

"error_message": "'dict' object has no attribute 'extend'"
如果我尝试像添加常规dict对象那样添加键和值对:

orm_filters['custom'] = qset
在添加“自定义”键后,当我尝试
返回orm_过滤器时,出现以下错误:

"error_message": "Cannot resolve keyword 'custom' into field. Choices are: comment, id, media_text, ..."
知道我做错了什么吗

我一直在试图找到一个解决这个问题的办法,现在没有任何运气,提前感谢您的帮助在这里

更新:我认为问题在于我试图覆盖apply\u过滤器的尝试没有实例化:

def apply_filters(self, request, applicable_filters):
        print 'applied filters'
        if 'custom' in applicable_filters:
            custom = applicable_filters.pop('custom')
        else:
            custom = None

        semi_filtered = super(TaggedResource, self).apply_filters(request, applicable_filters)

        return semi_filtered.filter(custom) if custom else semi_filtered
这可能就是为什么我遇到无法解析关键字“custom”错误的原因,因为我希望这里的apply\u filters方法在从适用的\u过滤器中获取“custom”后将其删除

不确定我的apply_filters def有什么问题。

尝试更改:

orm_filters.extend({'custom': qset})
致:

更新:(测试代码)

尝试更改:

orm_filters.extend({'custom': qset})
致:

更新:(测试代码)


我试过你放的东西,但我还需要一把钥匙(“自定义”)
orm_filters.update(**{'custom':qset})
可以将'custom'添加到dict中,并将Q对象作为其值对,但在我尝试返回它时,它仍然会给我与以前相同的错误:
“error_message”:“无法将关键字'custom'解析到字段中。选项包括:comment,”
当然,您会收到该消息,自定义不是一个字段,您不能对不存在的内容进行筛选,为什么要这样做?我想这没关系,因为我只是将其添加到
构建过滤器中的映射中。过滤器实际上并没有使用“custom”(自定义)运行,我在将“custom”(自定义)传递到适用的过滤器后弹出“custom”(自定义)
custom=适用的过滤器。pop('custom')
将return semi_filtered.filter(custom)if custom else semi_filtered更改为return semi_filtered.filter(**custom)if custom else semi_filtered我理解您的建议;但是,我认为它没有解决真正的问题,即在请求期间根本没有调用apply_filters方法。这可能是我遇到错误的原因,
无法将关键字“custom”解析到字段中。
我尝试了您输入的内容,但我还需要一个键(“custom”)
orm_filters.update(**{'custom':qset})
可以将'custom'添加到dict中,并将Q对象作为其值对,但在我尝试返回它时,它仍然会给我与以前相同的错误:
“error_message”:“无法将关键字'custom'解析到字段中。选项包括:comment,”
当然,您会收到该消息,自定义不是一个字段,您不能对不存在的内容进行筛选,为什么要这样做?我想这没关系,因为我只是将其添加到
构建过滤器中的映射中。过滤器实际上并没有使用“custom”(自定义)运行,我在将“custom”(自定义)传递到适用的过滤器后弹出“custom”(自定义)
custom=适用的过滤器。pop('custom')
将return semi_filtered.filter(custom)if custom else semi_filtered更改为return semi_filtered.filter(**custom)if custom else semi_filtered我理解您的建议;但是,我认为它没有解决真正的问题,即在请求期间根本没有调用apply_filters方法。这可能就是我出现错误的原因。
无法将关键字“custom”解析到字段中。
def build_filters(self, filters=None):
    filters = filters

    applicable_filters = super(TaggedResource, self).build_filters(filters)

    query = filters.get('query')
    if query:
        qset = (
            Q(comment__icontains=query) |
            Q(media_text__icontains=query)
        )
        applicable_filters['custom'] = qset

    return applicable_filters

def apply_filters(self, request, applicable_filters):
    custom = None
    if 'custom' in applicable_filters:
        custom = applicable_filters.pop('custom')

    semi_filtered = super(TaggedResource, self).apply_filters(request, applicable_filters)

    return semi_filtered.filter(**custom) if custom else semi_filtered