Here is my view and serializer:
class CreateNotations(CreateAPIView):
permission_classes = [IsAuthenticated]
serializer_class = NotationListSerializer
def post(self, request, *args, **kwargs):
return super().post(request, *args, **kwargs)
class NotationListSerializer(serializers.Serializer):
workitem_id = serializers.PrimaryKeyRelatedField(queryset=WorkItem.objects.all(), source="workitem")
notations = NotationSerializer(many=True)
def create(self, validated_data):
workitem = validated_data["workitem"]
IncompleteAnalysis.objects.filter(workitem=workitem).delete()
data = []
for notation in validated_data["notations"]:
data.append({
'workitem': workitem,
'incomplete_analysis_reason': notation["reason"],
'vessel_affected': notation["vessel"],
'user': self.context['request'].user,
'timestamp': datetime.now().isoformat()
})
return IncompleteAnalysis.objects.bulk_create([IncompleteAnalysis(**d) for d in data])
The body of the request received is:
{'workitem_id': 244, 'notations': [{'reason_id": 4, 'vessel_id': 6}]}
It fails with this:
AttributeError: Got AttributeError when attempting to get a value for field `workitem_id` on serializer `NotationListSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `list` instance.
Original exception text was: 'list' object has no attribute 'workitem'.
Here is the stack trace:
ERROR django.request:log.py:241 Internal Server Error: /api/notations/
Traceback (most recent call last):
File "/home/larrymartell/.local/lib/python3.8/site-packages/rest_framework/fields.py", line 446, in get_attribute
return get_attribute(instance, self.source_attrs)
File "/home/larrymartell/.local/lib/python3.8/site-packages/rest_framework/fields.py", line 96, in get_attribute
instance = getattr(instance, attr)
AttributeError: 'list' object has no attribute 'workitem'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/larrymartell/.local/lib/python3.8/site-packages/django/core/handlers/exception.py", line 56, in inner
response = get_response(request)
File "/home/larrymartell/.local/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/larrymartell/.local/lib/python3.8/site-packages/django/views/decorators/csrf.py", line 55, in wrapped_view
return view_func(*args, **kwargs)
File "/home/larrymartell/.local/lib/python3.8/site-packages/django/views/generic/base.py", line 103, in view
return self.dispatch(request, *args, **kwargs)
File "/home/larrymartell/.local/lib/python3.8/site-packages/rest_framework/views.py", line 509, in dispatch
response = self.handle_exception(exc)
File "/home/larrymartell/.local/lib/python3.8/site-packages/rest_framework/views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "/home/larrymartell/.local/lib/python3.8/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
raise exc
File "/home/larrymartell/.local/lib/python3.8/site-packages/rest_framework/views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
File "/inst/martell/EVServer/app/CAPgraph/createevapi/views.py", line 1270, in post
return super().post(request, *args, **kwargs)
File "/home/larrymartell/.local/lib/python3.8/site-packages/rest_framework/generics.py", line 190, in post
return self.create(request, *args, **kwargs)
File "/home/larrymartell/.local/lib/python3.8/site-packages/rest_framework/mixins.py", line 20, in create
headers = self.get_success_headers(serializer.data)
File "/home/larrymartell/.local/lib/python3.8/site-packages/rest_framework/serializers.py", line 555, in data
ret = super().data
File "/home/larrymartell/.local/lib/python3.8/site-packages/rest_framework/serializers.py", line 253, in data
self._data = self.to_representation(self.instance)
File "/home/larrymartell/.local/lib/python3.8/site-packages/rest_framework/serializers.py", line 509, in to_representation
attribute = field.get_attribute(instance)
File "/home/larrymartell/.local/lib/python3.8/site-packages/rest_framework/relations.py", line 190, in get_attribute
return super().get_attribute(instance)
File "/home/larrymartell/.local/lib/python3.8/site-packages/rest_framework/fields.py", line 479, in get_attribute
raise type(exc)(msg)
AttributeError: Got AttributeError when attempting to get a value for field `workitem_id` on serializer `NotationListSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `list` instance.
Original exception text was: 'list' object has no attribute 'workitem'.