【问题标题】:tastypie filtering美味派过滤
【发布时间】:2012-10-30 02:18:07
【问题描述】:

我开始使用 Django 和 sweetpie 来与我的数据库进行交互。

所以我有一个包含许多表的数据库,我可以设置过滤,这样我就可以使用这样的 URL,使用相关 Django 对象的链来过滤我的结果。

api/seq/mapping/?loadedwith__lane__flowcell__name=C16P5ACXX&loadedwith__lane__lane=8

映射资源设置如下:

class MappingResource(ModelResource):
    loadedwith = fields.ToOneField('sequencing.api.LoadedWithResource' , 'loadedwith' ) 
    class Meta:
        queryset = Mapping.objects.all()
        resource_name = 'mapping'
        allowed_methods = ['get' , 'post' , 'put' , 'patch' ,  'delete']
        authorization = Authorization()                        
        serializer = PrettyJSONSerializer()
        filtering = {
            'loadedwith': ALL_WITH_RELATIONS,
            'reference_filename' : ALL
        }

这一切都很好,正如我所期望的那样。

现在,当我弄乱了 URL 时,我发现了一个问题。 如果我错过了链上加载的对象之一,例如

loadedwith__lane__lane=8

改为使用

lane__lane=8

所以网址最终为:

api/seq/mapping/?loadedwith__lane__flowcell__name=C16P5ACXX&loadedwith__lane__lane=8

现在返回由第一部分过滤的结果:

loadedwith__lane__flowcell__name=C16P5ACXX

但基本上忽略了第二部分

lane__lane=8

我原以为它会抛出错误,或者不返回任何东西。在这种情况下有没有办法配置tastepie来抛出错误? (或者这是出于某种我不知道的原因的预期行为)?

【问题讨论】:

    标签: django filtering tastypie


    【解决方案1】:

    默认的 sweetpie 行为是忽略不匹配字段 [1] 的过滤器。

    改变这种行为的唯一方法是覆盖ModelResource build_filters() 方法。

    [1]https://github.com/toastdriven/django-tastypie/blob/master/tastypie/resources.py#L1784

    【讨论】:

      猜你喜欢
      • 2014-03-15
      • 2014-04-18
      • 1970-01-01
      • 2012-12-17
      • 2013-06-01
      • 2011-10-24
      • 1970-01-01
      • 2015-03-21
      • 1970-01-01
      相关资源
      最近更新 更多