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条记录)触发脱水是非常低效的
若你们计划使用大量的过滤器、排序等,那个么在模型中创建新的列可能是一个候选解决方案。我想这是这个领域的统计信息,所以若并没有新的列,那个么可能会稍微减轻你们的痛苦