1
在下面提供的示例中:https://stackoverflow.com/a/10022244/1386588我遇到了所提供示例代码的问题。为什么我无法将自定义键/值对添加到TastyPie高级过滤器定义中的orm_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_filters是一个字典映射,而不是一个列表。因此,我得到的错误:
"error_message": "'dict' object has no attribute 'extend'"
如果我尝试添加键值对,因为我有定期的dict对象:
orm_filters['custom'] = qset
我收到以下错误,当我尝试以增加“自定义”键后return orm_filters
:
"error_message": "Cannot resolve keyword 'custom' into field. Choices are: comment, id, media_text, ..."
什么我做错了任何想法?
我一直在试图找到一个解决方案,这一段时间没有任何运气,在此先感谢您的帮助!
UPDATE:我认为这个问题是,我试图重写apply_filters没有实例:
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
这可能是为什么我收到了无法解析关键词“自定义”的错误,因为我期待apply_filters方法在从applicable_filters中获取后删除'custom'。
不知道我的apply_filters def有什么问题。
我想你放什么,但我需要有一个关键('custom')。 'orm_filters.update(** {'custom':qset})'用于将带有Q对象的'自定义'添加到字典中,因为它是值对,但是当我尝试返回时它仍然给出与以前相同的错误它:''error_message“:”无法解析关键字'自定义'到字段中。选择是:comment,...“' – bevinlorenzo 2012-07-31 14:37:11
Offcourse你得到那个消息,自定义不是一个字段,你不能过滤那些不不存在,你为什么这样做? – 2012-07-31 14:43:36
我认为这样可以,因为我只是将它添加到'build_filters'中的映射中。该过滤器实际上并没有运行“自定义” - [如此处所示](http://stackoverflow.com/a/10022244/1386588),我已将“自定义”传递到适用的过滤器后关闭。 'custom = applicable_filters.pop('custom')' – bevinlorenzo 2012-07-31 15:08:16