build_filters() 得到了意外的关键字参数 'ignore_bad_filters'

build_filters() got an unexpected keyword argument 'ignore_bad_filters'

我刚刚将我的代码从 Django 1.8 更新到 1.11,所以我还必须更新美味派。在更新之前一切正常,但现在我在我的一项测试中遇到了这个错误。 这是测试用例

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)

这是完整的跟踪,

   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'

能否请您粘贴您的 tastypie 资源代码?

没有相关代码,我只能猜测是因为你override了 def build_filters(): 在您的模型资源 class 中,但较新版本的 tastypie 在函数定义中添加了一个 ignore_bad_filter 参数,您的模型资源代码中没有该参数。

最新tastypie中的build_filters函数声明: def build_filters(self, filters=None, ignore_bad_filters=False):

旧版本可能没有ignore_bad_filter参数。要解决此问题,只需将 ignore_bad_filters=False 关键字参数添加到模型资源 class.

中的 build_filters 函数