1

データベースを操作するために、Djangoとtastypieを使い始めています。

そのため、多数のテーブルを含むデータベースがあり、フィルタリングを設定して、関連するDjangoオブジェクトのチェーンを使用して結果をフィルタリングするようなURLを使用できるようにしています。

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オブジェクトの1つを見逃した場合、たとえば

loadedwith__lane__lane=8

代わりに

lane__lane=8

したがって、URLは次のようになります。

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

これで、最初の部分でフィルタリングされた結果が返されます。

loadedwith__lane__flowcell__name=C16P5ACXX

しかし基本的に2番目の部分を無視します

lane__lane=8

エラーをスローするか、何も返さないことを期待していました。この状況でエラーをスローするようにtastypieを構成する方法はありますか?(または、これは私が気付いていない何らかの理由で予想される動作ですか)?

4

1 に答える 1

3

デフォルトのおいしい動作は、フィールドに一致しないフィルターを無視することです[1]。

この動作を変更する唯一の方法は、ModelResource build_filters()メソッドをオーバーライドすることです。

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

于 2012-11-09T19:22:36.600 に答える