首页 > 解决方案 > 列表对象没有属性副本

问题描述

feed_obj = self.get_feed_obj(request, kwargs.get('feed_id'))
        ad_ingredient_id = kwargs.get('ad_ingredient_id')
        adingredient_obj = AdIngredient.objects.filter(feed_id=feed_obj.id, created_by_id=request.user.id, state=1).first()
        for data in self.data_formating(request, feed_obj):
            serializer = self.serializer_class(adingredient_obj,data=data,partial=True)
            if serializer.is_valid():
                serializer.save()
            else:
                return Response(
                    {
                        'success': False,
                        'detail': serializer.errors
                    },
                    status=status.HTTP_400_BAD_REQUEST
                )
        return Response(
            {
                'success': True,
                'detail': 'Feed Ad Ingredients information updated successfully',
                'data': feed_obj.id
            },
            status=status.HTTP_200_OK
        )

它不会更新数据,它会不断引入创建对象时添加的旧数据。

/api/feeds/ad-ingredient/55/ 'list' 对象的 AttributeError 没有属性 'copy'

追溯:

内部 39 中的文件“/Users/omairbukhari/env_justads/lib/python2.7/site-packages/django/core/handlers/exception.py”。response = get_response(request)

_legacy_get_response 249 中的文件“/Users/omairbukhari/env_justads/lib/python2.7/site-packages/django/core/handlers/base.py”。 response = self._get_response(request)

_get_response 187 中的文件“/Users/omairbukhari/env_justads/lib/python2.7/site-packages/django/core/handlers/base.py”。response = self.process_exception_by_middleware(e, request)

_get_response 185 中的文件“/Users/omairbukhari/env_justads/lib/python2.7/site-packages/django/core/handlers/base.py”。 response = Wrapped_callback(request, *callback_args, **callback_kwargs)

Wrapped_view 58 中的文件“/Users/omairbukhari/env_justads/lib/python2.7/site-packages/django/views/decorators/csrf.py”。返回 view_func(*args, **kwargs)

视图 83 中的文件“/Users/omairbukhari/env_justads/lib/python2.7/site-packages/rest_framework/viewsets.py”。 return self.dispatch(request, *args, **kwargs)

调度 477 中的文件“/Users/omairbukhari/env_justads/lib/python2.7/site-packages/rest_framework/views.py”。响应 = self.handle_exception(exc)

handle_exception 437 中的文件“/Users/omairbukhari/env_justads/lib/python2.7/site-packages/rest_framework/views.py”。self.raise_uncaught_exception(exc)

调度 474 中的文件“/Users/omairbukhari/env_justads/lib/python2.7/site-packages/rest_framework/views.py”。 response = handler(request, *args, **kwargs)

更新 738 中的文件“/Users/omairbukhari/justads/backend/feeds/views.py”。 request_data = request.data.copy()

标签: pythondjangopython-2.7

解决方案


list.copy在 Python 3.3 中引入。

您使用的是 Python 2.7,因此您应该将您正在使用的 django 版本降级(到1.11):

来自Django 的文档

Django version  Python versions
1.11            2.7, 3.4, 3.5, 3.6
2.0             3.4, 3.5, 3.6, 3.7
2.1, 2.2        3.5, 3.6, 3.7

更新

查看堆栈跟踪中的最后一行:

File "/Users/omairbukhari/justads/backend/feeds/views.py" in update 738. 
     request_data = request.data.copy()

相反,使用空切片:request_data = request.data[:]

如果这不是您的代码,那么您没有正确降级 django 的版本。


推荐阅读