我有一个tastypie modelRseource,看起来像这样:
class TaggedResource(ModelResource):
tags = ListField()
user = fields.ForeignKey(UserProfileResource, 'user')
class Meta:
queryset = Media.objects.all().order_by('-timestamp')
authorization = MediaAuthorization()
detail_allowed_methods = ['get', 'post', 'put', 'delete','patch']
filtering = {
#'user': ALL_WITH_RELATIONS,
#exact is date, lt is less than lte less than equal to, etc
'timestamp': ['exact', 'range', 'lt', 'lte', 'gte', 'gt'],
'social_source': ALL,
'media_type': ALL,
'comment': ['exact', 'startswith', 'endswith', 'contains'],
'media_text': ['exact', 'startswith', 'endswith', 'contains'],
}
Run Code Online (Sandbox Code Playgroud)
我需要在过滤器之间使用OR运算符,并且希望将查询合并到一个参数中.例如,我想从注释字段OR media_text字段返回包含单词"test"过滤的对象.
这将是理想的:http:mysite.com/api/v1/tagged?q = test
其中'q'对两个字段执行OR过滤.
这可行吗?
更新:这是我正在使用的高级过滤器,但我不确定如何获得一个OR语句:
def build_filters(self, filters=None):
if filters is None:
filters = {}
orm_filters = super(TaggedResource, self).build_filters(filters)
if 'q' in filters:
orm_filters['comment__contains'] = filters['q']
orm_filters['media_text__contains'] = filters['q']
return orm_filters
Run Code Online (Sandbox Code Playgroud)
你通过重写 build_filters 做了正确的事情,你可以使用 django 的 Q 类进行 AND/OR 查询,我在这里回答了类似的问题
这是另一个有趣的:
| 归档时间: |
|
| 查看次数: |
5572 次 |
| 最近记录: |