django-tastypie: Cannot access bundle.request in dehydrate(self,bundle)

梦想与她 提交于 2019-12-02 12:35:09

问题


I found someone with the same problem, but the solation for him doesn't work with me: see Django-Tastypie: How Do You Access (Http)request object in the Bundle?

I Am trying to apply the workaround suggested in: Django tastypie: Resource show different in detailed request as in list request

resulting in this code in my resources file (api.py):

class LocationResource(ModelResource):
    locationtype = fields.ForeignKey(LocationTypeResource, 'locationtype', full=False)

    class Meta:
        queryset = Location.objects.all()
        resource_name = 'location'
        excludes = ['public_anonymous', 'public_authorized','x','y','z']
        authentication = BasicAuthentication()
        authorization = DjangoAuthorization()

    def dehydrate(self, bundle):
        if bundle.request:
            if bundle.request.path: == "/api/v1/location/":
                del bundle.data['description']
            else:

                logger.debug("request availabe")
        else:
            logger.debug("request not availabe")
        return bundle

I get the error:

{
error_message: "'Bundle' object has no attribute 'request'",
traceback: "Traceback (most recent call last):

  File "/home/michel/django/sites/regelwater/eggs/django_tastypie-0.9.10-py2.6.egg/tastypie/resources.py", line 178, in wrapper
    response = callback(request, *args, **kwargs)

  File "/home/michel/django/sites/regelwater/eggs/django_tastypie-0.9.10-py2.6.egg/tastypie/resources.py", line 379, in dispatch_list
    return self.dispatch('list', request, **kwargs)

  File "/home/michel/django/sites/regelwater/eggs/django_tastypie-0.9.10-py2.6.egg/tastypie/resources.py", line 409, in dispatch
    response = method(request, **kwargs)

  File "/home/michel/django/sites/regelwater/eggs/django_tastypie-0.9.10-py2.6.egg/tastypie/resources.py", line 987, in get_list
    to_be_serialized['objects'] = [self.full_dehydrate(obj=obj) for obj in to_be_serialized['objects']]

  File "/home/michel/django/sites/regelwater/eggs/django_tastypie-0.9.10-py2.6.egg/tastypie/resources.py", line 638, in full_dehydrate
    bundle = self.dehydrate(bundle)

  File "/home/michel/django/sites/regelwater/reservoir/api.py", line 71, in dehydrate
    if bundle.request:

AttributeError: 'Bundle' object has no attribute 'request'
"
}

回答1:


You're probably running Tastypie 9.10 if you installed from pypi. The Bundle object in the pypi version does indeed not have a request object.

If you upgrade to the git version of django-tastypie master and use that instead the problem should be resolved.

pip uninstall django-tastypie 
pip install -e git+https://github.com/toastdriven/django-tastypie.git#egg=django-tastypie


来源:https://stackoverflow.com/questions/8263331/django-tastypie-cannot-access-bundle-request-in-dehydrateself-bundle

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!