Tastypie 如何对脱水过程中创建的自定义值进行过滤?

Tastypie 如何对脱水过程中创建的自定义值进行过滤?,tastypie,Tastypie,在此过程中,我创建了一个自定义值: def dehydrate(self, bundle): bundle.data['custom_field'] = ["add lots of stuff and return an int"] return bundle 我想过滤一下 /?format=json&custom_field__gt=0... 但是,我得到一个错误,“[自定义字段]字段没有用于搜索的“属性”。 也许我误解了自定义过滤器,但在build\u filte

在此过程中,我创建了一个自定义值:

def dehydrate(self, bundle):
    bundle.data['custom_field'] = ["add lots of stuff and return an int"]
    return bundle
我想过滤一下

/?format=json&custom_field__gt=0...
但是,我得到一个错误,
“[自定义字段]字段没有用于搜索的“属性”。

也许我误解了自定义过滤器,但在
build\u filters
apply\u filters
中,我似乎无法访问自定义字段进行过滤。在我所看到的例子中,我似乎不得不重做内置脱水过滤器中的所有工作,例如

for all the items:
    item['custom_field'] = ["add lots of stuff and return an int"]
    filter on item and add to pk_list 

orm_filters["pk__in"] = [i.pk for i in pk_list]

这似乎不对,因为我已经做了两次了。我遗漏了什么?

问题是脱水是设计上的“每个对象”,而过滤器是每个对象列表。这就是为什么你将不得不手动过滤它,并在脱水过程中重做工作

你可以这样想象:

# Whole table
[obj, obj1, obj2, obj3, obj4, obj5, obj5]

# filter operations
[...]

# After filtering
[obj1, obj3, obj6]    

# Returning
[dehydrate(obj), dehydrate(obj3), dehydrate(obj5)] 
此外,您可以想象,如果通过过滤获取,您将获得100个对象。对整个表(例如100000条记录)触发脱水是非常低效的

若你们计划使用大量的过滤器、排序等,那个么在模型中创建新的列可能是一个候选解决方案。我想这是这个领域的统计信息,所以若并没有新的列,那个么可能会稍微减轻你们的痛苦