2017-07-16 10 views
0

django 1.8から1.11にコードを更新したので、おいしいパイを更新しなければなりませんでした。更新する前にすべてうまくいきましたが、今では私のテストでこのエラーが発生しています。 ここbuild_filters()は予期しないキーワード引数 'ignore_bad_filters'を持っています

Traceback (most recent call last): 
     File "/spare/local/projects/towerportal/apps/exchangedb/tests/test_api.py", line 68, in test_does_not_return_restricted_fields_when_insufficient_permissions 
     response = self.get_response(self.detail_url) 
     File "/spare/local/projects/towerportal/apps/exchangedb/tests/test_api.py", line 26, in get_response 
     data=data) 
     File "/spare/local/venv/lib/python2.7/site-packages/tastypie/test.py", line 70, in get 
     return self.client.get(uri, **kwargs) 
     File "/spare/local/venv/lib/python2.7/site-packages/django/test/client.py", line 536, in get 
     **extra) 
     File "/spare/local/venv/lib/python2.7/site-packages/django/test/client.py", line 340, in get 
     return self.generic('GET', path, secure=secure, **r) 
     File "/spare/local/venv/lib/python2.7/site-packages/django/test/client.py", line 416, in generic 
     return self.request(**r) 
     File "/spare/local/venv/lib/python2.7/site-packages/django/test/client.py", line 501, in request 
     six.reraise(*exc_info) 
     File "/spare/local/venv/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner 
     response = get_response(request) 
     File "/spare/local/venv/lib/python2.7/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response 
     response = self._get_response(request) 
     File "/spare/local/venv/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response 
     response = self.process_exception_by_middleware(e, request) 
     File "/spare/local/venv/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response 
     response = wrapped_callback(request, *callback_args, **callback_kwargs) 
     File "/spare/local/venv/lib/python2.7/site-packages/django/utils/decorators.py", line 185, in inner 
     return func(*args, **kwargs) 
     File "/spare/local/venv/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view 
     return view_func(*args, **kwargs) 
     File "/spare/local/venv/lib/python2.7/site-packages/tastypie/resources.py", line 221, in wrapper 
     response = callback(request, *args, **kwargs) 
     File "/spare/local/venv/lib/python2.7/site-packages/tastypie/resources.py", line 470, in dispatch_detail 
     return self.dispatch('detail', request, **kwargs) 
     File "/spare/local/venv/lib/python2.7/site-packages/tastypie/resources.py", line 493, in dispatch 
     response = method(request, **kwargs) 
     File "/spare/local/venv/lib/python2.7/site-packages/tastypie/resources.py", line 1376, in get_detail 
     obj = self.cached_obj_get(bundle=basic_bundle, **self.remove_api_resource_names(kwargs)) 
     File "/spare/local/venv/lib/python2.7/site-packages/tastypie/resources.py", line 1195, in cached_obj_get 
     cached_bundle = self.obj_get(bundle=bundle, **kwargs) 
     File "/spare/local/venv/lib/python2.7/site-packages/tastypie/resources.py", line 2176, in obj_get 
     applicable_filters = self.build_filters(filters=kwargs, ignore_bad_filters=True) 
    TypeError: build_filters() got an unexpected keyword argument 'ignore_bad_filters' 

答えて

1

は、あなたのごtastypieリソースのコードを貼り付けてくださいでした、テストケースここ

def test_does_not_return_restricted_fields_when_insufficient_permissions(self): 
    self.user.user_permissions.all().delete() 

    response = self.api_client.get(url, 
           format='json', 
           authentication=self.create_apikey(username=self.username, api_key=self.api_key), 
           data=data) 

完全なトレースがあるのですか? tastypieの

関連するコードがなければ、私はあなたがあなたのmodelresourceクラスで def build_filters():をオーバーライドするので、それがあることだけを推測することができますが、新しいバージョンでは、あなたのmodelresourceコードではありません関数定義でignore_bad_filterパラメータを追加しました。最新tastypieで

build_filters関数の宣言: def build_filters(self, filters=None, ignore_bad_filters=False):

古いバージョンは、おそらくignore_bad_filterパラメータはありません。これを修正するには、modelresourceクラスのbuild_filters関数にignore_bad_filters=Falseキーワードパラメータを追加してください。

+1

* argsと** kwargsを収集してスーパークラスに渡すことは、一般には良い方法です。 def build_filters(self、filter = None、* args、** kwargs):super().build_filters(filter、* args、** kwargs)を追加します。スーパークラスのbuild_filtersを呼び出さなくても、** kwargsをキャプチャすると、メソッドのシグネチャの変更から例外を防ぐことができます。 – GDorn

+0

また、tastypie docsはこの新しいパラメータについて言及しません。それは次のポイントリリースで修正される予定です。 – GDorn

関連する問題