Django-rest-framework: рд╡рд┐рд╢реЗрд╖рддрд╛ рддреНрд░реБрдЯрд┐: 'OrderedDict' рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ 'pk'

рдХреЛ рдирд┐рд░реНрдорд┐рдд 24 рдордИ 2015  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: encode/django-rest-framework

рд╡рд┐рдЪрд╛рд░:

@detail_route(methods=['post'])
def quote(self, request, pk):
    task = self.get_object()

    serializer = serializers.TaskCreateQuoteSerializer(data=request.DATA, task=task)

    if not serializer.is_valid():
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    # this causes a problem
    serializer.data['servicetasks']:

рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ:

class TaskCreateQuoteSerializer(serializers.Serializer):
    servicetasks = serializers.PrimaryKeyRelatedField(many=True, required=True, allow_null=False,
        queryset=ServiceTask.objects.all())

    def __init__(self, task, *args, **kwargs):
        super(TaskCreateQuoteSerializer, self).__init__(*args, **kwargs)
        # print task.servicetask_set.all()
        # self.fields['servicetasks'].queryset = task.servicetask_set.all()

рдЬрдм рдореИрдВ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реВрдВ:

TaskCreateQuoteSerializer(data={u'servicetasks': [3115, 3114]}, task=<Task: E13/688 COMPLETE>):
    servicetasks = PrimaryKeyRelatedField(allow_null=False, many=True, queryset=[<ServiceTask: Ser...]

рддреЛ рдЬрдм рднреА рдореИрдВ serializer.data рдХреЛ рдЖрдЬрдорд╛рдХрд░ рдПрдХреНрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдЕрдкрд╡рд╛рдж рдорд┐рд▓рддрд╛ рд╣реИ:

рд╡рд┐рд╢реЗрд╖рддрд╛ рддреНрд░реБрдЯрд┐: 'OrderedDict' рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ 'pk'

Traceback:
File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
  57.         return view_func(*args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/rest_framework/viewsets.py" in view
  85.             return self.dispatch(request, *args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/rest_framework/views.py" in dispatch
  452.             response = self.handle_exception(exc)
File "/usr/local/lib/python2.7/site-packages/rest_framework/views.py" in dispatch
  449.             response = handler(request, *args, **kwargs)
File "/usr/src/app/abas/apps/api/views.py" in quote
  270.         if not serializer.data['servicetasks']:
File "/usr/local/lib/python2.7/site-packages/rest_framework/serializers.py" in data
  466.         ret = super(Serializer, self).data
File "/usr/local/lib/python2.7/site-packages/rest_framework/serializers.py" in data
  215.                 self._data = self.to_representation(self.validated_data)
File "/usr/local/lib/python2.7/site-packages/rest_framework/serializers.py" in to_representation
  426.                 attribute = field.get_attribute(instance)
File "/usr/local/lib/python2.7/site-packages/rest_framework/relations.py" in get_attribute
  364.         if not instance.pk:

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

serializer.data рдЧреБрдг рдХреЗрд╡рд▓ рддрднреА рдорд╛рдиреНрдп рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ serializer рдХреЗ рд▓рд┐рдП рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╣реЛред
рдпрд╛ рддреЛ serializer.save() рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВ рдпрд╛ рдмрдЪрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП serializer.validated_data рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд╣рдореЗрдВ рдЗрд╕ рдкреНрд░рдпреЛрдЧ рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЧрд╛рд░реНрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

serializer.data рдЧреБрдг рдХреЗрд╡рд▓ рддрднреА рдорд╛рдиреНрдп рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ serializer рдХреЗ рд▓рд┐рдП рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╣реЛред
рдпрд╛ рддреЛ serializer.save() рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВ рдпрд╛ рдмрдЪрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП serializer.validated_data рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд╣рдореЗрдВ рдЗрд╕ рдкреНрд░рдпреЛрдЧ рдХреЗ рдЦрд┐рд▓рд╛рдл рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЧрд╛рд░реНрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╡рд┐рд╡рд░рдг_рд░реВрдЯ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рднреА рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рдерд╛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рд▓рдЧрд╛ред рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдХреЛрдИ рдЧрд╛рд░реНрдб рд╣реЛрддрд╛ рдЬреЛ рдЖрдкрдХреА рдкрд┐рдЫрд▓реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ The serializer.data property is only valid if you have a saved instance to serializer. Either call serializer.save() or use serializer.validated_data to access date prior to saving. . рдмрддрд╛рддрд╛ рд╣реЛ

@tomchristie рдпрд╣рд╛рдБ рд╡рд░реНрддрдорд╛рди рддреНрд░реБрдЯрд┐ data рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рджреМрд░рд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ рдХрд┐ "рдпрд╛ рддреЛ serializer.save() рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ рдпрд╛ рд╕рд╣реЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рджрд┐рдирд╛рдВрдХ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП serializer.validated_data рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред" рдЪреВрдВрдХрд┐ рдмрд╛рдж рдореЗрдВ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡реИрд╕реЗ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рддред

рдкреНрд░рд╢реНрди рд╣реИ: рдХреНрдпрд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ data рдХреЛ validated_data рд╕реЗ рднрд░рд╛ рдЬрд╛рдП рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдкрджрд╛рд╡рдирддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ - рд▓рд╛рдЗрдиреЛрдВ 224/225 https://github.com/tomchristie/django-rest-framework/blob/8d7c0a8474583df6b27d0d5be8a84bd9a154ab35/rest_framework/serializers.py#L224 рдкрд░

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

mrodal picture mrodal  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kdzxiaoli picture kdzxiaoli  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gabn88 picture gabn88  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Lucidiot picture Lucidiot  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

tomchristie picture tomchristie  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ