Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

retrieve_related fails for toOne relationship #489

Closed
Labels
@n2ygk

Description

@n2ygk

@Anton-Shutik Using your new#451 support for related links, using{'get': 'retrieve_related'} works fine for a serializerResourceRelatedField wheremany=True but fails for a toOne relationship wheremany=False.

Using the old style, I had to overrideget_queryset() formany=True views andget_object() formany=False views so I expect there is a similar need for another "flavor" ofretrieve_related for toOne relationships. Does this make sense?

Here's my old view code for reference:

classCourseTermViewSet(CourseBaseViewSet):queryset=CourseTerm.objects.all()serializer_class=CourseTermSerializerdefget_queryset(self,*args,**kwargs):"""        Implement `related` view:        Override `.list` if course_pk kwarg is present since course is toMany to course_term.        """course_pk=self.kwargs.get('course_pk',None)ifcourse_pkisnotNone:returnself.queryset.filter(course_id=course_pk)returnsuper(CourseTermViewSet,self).get_queryset()
classCourseViewSet(CourseBaseViewSet):queryset=Course.objects.all()serializer_class=CourseSerializerdefget_object(self):"""        Implement `related` view:        Override `.retrieve` if course_term_pk kwarg is present since course_term is toOne to course.        """course_term_pk=self.kwargs.get('course_term_pk',None)ifcourse_term_pkisnotNone:returnCourseTerm.objects.get(id=course_term_pk).coursereturnsuper(CourseViewSet,self).get_object()

The new code (eliminates those overrides, sets the kwarg topk and updates therelated_link_view_names tocourse-related andcourse_term-related, respectively and throws this error when retrieved:

AttributeError at /v1/course_terms/a1d34785-cc25-4c1c-9806-9d05a98068c7/course/Got AttributeError when attempting to get a value for field `school_bulletin_prefix_code` on serializer `CourseSerializer`.The serializer field might be named incorrectly and not match any attribute or key on the `PKOnlyObject` instance.Original exception text was: 'PKOnlyObject' object has no attribute 'school_bulletin_prefix_code'....Traceback:File "/Users/alan/src/django-training/env/lib/python3.6/site-packages/rest_framework/fields.py" in get_attribute  441.             return get_attribute(instance, self.source_attrs)File "/Users/alan/src/django-training/env/lib/python3.6/site-packages/rest_framework/fields.py" in get_attribute  100.                 instance = getattr(instance, attr)During handling of the above exception ('PKOnlyObject' object has no attribute 'school_bulletin_prefix_code'), another exception occurred:File "/Users/alan/src/django-training/env/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner  34.             response = get_response(request)File "/Users/alan/src/django-training/env/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response  126.                 response = self.process_exception_by_middleware(e, request)File "/Users/alan/src/django-training/env/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response  124.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)File "/Users/alan/src/django-training/env/lib/python3.6/site-packages/django/views/decorators/csrf.py" in wrapped_view  54.         return view_func(*args, **kwargs)File "/Users/alan/src/django-training/env/lib/python3.6/site-packages/rest_framework/viewsets.py" in view  103.             return self.dispatch(request, *args, **kwargs)File "/Users/alan/src/django-training/env/lib/python3.6/site-packages/rest_framework/views.py" in dispatch  483.             response = self.handle_exception(exc)File "/Users/alan/src/django-training/env/lib/python3.6/site-packages/rest_framework/views.py" in handle_exception  443.             self.raise_uncaught_exception(exc)File "/Users/alan/src/django-training/env/lib/python3.6/site-packages/rest_framework/views.py" in dispatch  480.             response = handler(request, *args, **kwargs)File "/Users/alan/src/django-training/env/lib/python3.6/site-packages/rest_framework_json_api/views.py" in retrieve_related  128.         return Response(serializer.data)File "/Users/alan/src/django-training/env/lib/python3.6/site-packages/rest_framework/serializers.py" in data  560.         ret = super(Serializer, self).dataFile "/Users/alan/src/django-training/env/lib/python3.6/site-packages/rest_framework/serializers.py" in data  262.                 self._data = self.to_representation(self.instance)File "/Users/alan/src/django-training/env/lib/python3.6/site-packages/rest_framework/serializers.py" in to_representation  514.                 attribute = field.get_attribute(instance)File "/Users/alan/src/django-training/env/lib/python3.6/site-packages/rest_framework/fields.py" in get_attribute  462.             raise type(exc)(msg)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions


      [8]ページ先頭

      ©2009-2025 Movatter.jp