Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django AttributeError:&x27;收藏。订购信息和#x27;对象没有属性';pk';_Python_Django - Fatal编程技术网

Python Django AttributeError:&x27;收藏。订购信息和#x27;对象没有属性';pk';

Python Django AttributeError:&x27;收藏。订购信息和#x27;对象没有属性';pk';,python,django,Python,Django,当我尝试向模型中添加url属性时,出现以下错误: AttributeError: 'collections.OrderedDict' object has no attribute 'pk' 这些是我使用的代码。我尝试了很多东西,但每次尝试都会出错 序列化程序: class GroupPatchSerializer(serializers.ModelSerializer): linked_sites = serializers.ListField() name = serial

当我尝试向模型中添加url属性时,出现以下错误:

AttributeError: 'collections.OrderedDict' object has no attribute 'pk'
这些是我使用的代码。我尝试了很多东西,但每次尝试都会出错

序列化程序:

class GroupPatchSerializer(serializers.ModelSerializer):
    linked_sites = serializers.ListField()
    name = serializers.CharField(required=False)
    url = serializers.HyperlinkedIdentityField(
        view_name="group-detail", lookup_url_kwarg="group_pk"
    )

    class Meta:
        model = Group
        fields = ("id", "url", "name", "linked_sites")

    def validate_linked_sites(self, sites):
        ** code **
        return sites

    # noinspection PyMethodMayBeStatic
    def validate_name(self, name):
        ** code **
        return name
视图:

测试等级:

def test_ok_authorized_access(self):
    # Login the user
    self.client.force_login(self.user_1)
    UserSiteFactory(user=self.user_1, site=self.test_site_3)

    # Get the url
    url = reverse("group-detail", kwargs={"group_pk": self.test_group_1.pk})

    # New group name
    new_name = "New group name"

    sites = [self.test_site_3.pk]

    # Execute the patch operation
    response = self.client.patch(
        url, data={"name": new_name, "linked_sites": sites}
    )

    # Test if there was no error
    self.assertEqual(response.status_code, status.HTTP_200_OK)

    # Test if the group was renamed
    group = Group.objects.all().filter(pk=self.test_group_1.pk).first()
    self.assertEqual(group.name, new_name)
堆栈跟踪

Traceback (most recent call last):
  File "/opt/project/backend/groups/tests/test_group_patch.py", line 45, in test_ok_authorized_access
    url, data={"name": new_name, "linked_sites": sites}
  File "/usr/local/lib/python3.6/site-packages/rest_framework/test.py", line 310, in patch
    path, data=data, format=format, content_type=content_type, **extra)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/test.py", line 215, in patch
    return self.generic('PATCH', path, data, content_type, **extra)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/test.py", line 232, in generic
    method, path, data, content_type, secure, **extra)
  File "/usr/local/lib/python3.6/site-packages/django/test/client.py", line 422, in generic
    return self.request(**r)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/test.py", line 283, in request
    return super().request(**kwargs)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/test.py", line 235, in request
    request = super().request(**kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/test/client.py", line 503, in request
    raise exc_value
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/viewsets.py", line 114, in view
    return self.dispatch(request, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 505, in dispatch
    response = self.handle_exception(exc)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 465, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 476, in raise_uncaught_exception
    raise exc
  File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 502, in dispatch
    response = handler(request, *args, **kwargs)
  File "/opt/project/backend/groups/views/group_detail_view.py", line 108, in patch
    return Response(serializer.data, status=status.HTTP_200_OK)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/serializers.py", line 559, in data
    ret = super().data
  File "/usr/local/lib/python3.6/site-packages/rest_framework/serializers.py", line 263, in data
    self._data = self.to_representation(self.validated_data)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/serializers.py", line 526, in to_representation
    ret[field.field_name] = field.to_representation(attribute)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/relations.py", line 393, in to_representation
    url = self.get_url(value, self.view_name, request, format)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/relations.py", line 329, in get_url
    lookup_value = getattr(obj, self.lookup_field)
AttributeError: 'collections.OrderedDict' object has no attribute 'pk'
发件人:

lookup\u field
-目标上应用于查找的字段。应与引用视图上的URL关键字参数相对应。默认值为“pk”

lookup\u url\u kwarg
-url配置中定义的关键字参数的名称,对应于查找字段。默认使用与
查找\u字段
相同的值

因此,您直接设置了
lookup\u url\u kwarg
,但没有更改
lookup\u字段
,这就是错误的来源。由于
lookup\u url\u kwarg
默认值与
lookup\u field
相同,因此我们可以使用该值:

类GroupPatchSerializer(serializers.ModelSerializer):
#代码。。。
url=serializers.HyperlinkedEntityField(
查看\u name=“组详细信息”,查找\u field=“组主键”
)
#代码。。。
来自:

lookup\u field
-目标上应用于查找的字段。应与引用视图上的URL关键字参数相对应。默认值为“pk”

lookup\u url\u kwarg
-url配置中定义的关键字参数的名称,对应于查找字段。默认使用与
查找\u字段
相同的值

因此,您直接设置了
lookup\u url\u kwarg
,但没有更改
lookup\u字段
,这就是错误的来源。由于
lookup\u url\u kwarg
默认值与
lookup\u field
相同,因此我们可以使用该值:

类GroupPatchSerializer(serializers.ModelSerializer):
#代码。。。
url=serializers.HyperlinkedEntityField(
查看\u name=“组详细信息”,查找\u field=“组主键”
)
#代码。。。

您何时看到错误消息,堆栈跟踪指向代码的哪一行?可能包括完整的堆栈跟踪。当运行测试类时,它指向我执行请求的行。请包括堆栈跟踪和您的测试代码(导致错误的代码)。我添加了所有内容:)您何时看到错误消息,堆栈跟踪指向代码的哪一行?可能包括完整的堆栈跟踪。运行测试类时,它指向我执行请求的行。请包括堆栈跟踪和测试代码(导致错误的代码)。我添加了所有内容:)
Traceback (most recent call last):
  File "/opt/project/backend/groups/tests/test_group_patch.py", line 45, in test_ok_authorized_access
    url, data={"name": new_name, "linked_sites": sites}
  File "/usr/local/lib/python3.6/site-packages/rest_framework/test.py", line 310, in patch
    path, data=data, format=format, content_type=content_type, **extra)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/test.py", line 215, in patch
    return self.generic('PATCH', path, data, content_type, **extra)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/test.py", line 232, in generic
    method, path, data, content_type, secure, **extra)
  File "/usr/local/lib/python3.6/site-packages/django/test/client.py", line 422, in generic
    return self.request(**r)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/test.py", line 283, in request
    return super().request(**kwargs)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/test.py", line 235, in request
    request = super().request(**kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/test/client.py", line 503, in request
    raise exc_value
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/viewsets.py", line 114, in view
    return self.dispatch(request, *args, **kwargs)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 505, in dispatch
    response = self.handle_exception(exc)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 465, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 476, in raise_uncaught_exception
    raise exc
  File "/usr/local/lib/python3.6/site-packages/rest_framework/views.py", line 502, in dispatch
    response = handler(request, *args, **kwargs)
  File "/opt/project/backend/groups/views/group_detail_view.py", line 108, in patch
    return Response(serializer.data, status=status.HTTP_200_OK)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/serializers.py", line 559, in data
    ret = super().data
  File "/usr/local/lib/python3.6/site-packages/rest_framework/serializers.py", line 263, in data
    self._data = self.to_representation(self.validated_data)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/serializers.py", line 526, in to_representation
    ret[field.field_name] = field.to_representation(attribute)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/relations.py", line 393, in to_representation
    url = self.get_url(value, self.view_name, request, format)
  File "/usr/local/lib/python3.6/site-packages/rest_framework/relations.py", line 329, in get_url
    lookup_value = getattr(obj, self.lookup_field)
AttributeError: 'collections.OrderedDict' object has no attribute 'pk'