Я пытаюсь использовать ListSerializer, чтобы я мог создавать / десериализовать несколько объектов в списке на POST.Я следовал руководству на https://www.django -rest-framework.org / api-guide / serializers / # listserializer , но, похоже, столкнулся с этой ошибкой при посещении конечной точки.
assert self.child is not None, '``child`` is a required argument.'
python3.7/site-packages/rest_framework/serializers.py in __init__, line 592
Мои сериализаторы выглядят следующим образом:
class PredictionListSerializer(serializers.ListSerializer):
def update(self, instance, validated_data):
pass
def create(self, validated_data):
predictions = [Prediction(**item) for item in validated_data]
return Prediction.objects.bulk_create(predictions)
class NestedPredictionSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(read_only=True)
# Nested Serializer
data = DataSerializer()
class Meta:
model = Prediction
list_serializer_class = PredictionListSerializer
fields = ('id', 'specimen_id', 'data' 'date_added',)
extra_kwargs = {
'slug': {'validators': []},
}
datatables_always_serialize = ('id',)
При инициализации ListSerializer выдается ошибка подтверждения, однакоСериализатор инициализируется во ViewSet следующим образом.
class BulkPredictionViewSet(viewsets.ModelViewSet):
queryset = Prediction.objects.all()
serializer_class = PredictionListSerializer
Кто-нибудь знаком с этой проблемой?Мне интересно, влияет ли это на отсутствие контроля над инициализацией сериализатора (потому что я использую ViewSet).Если я пытаюсь передать NestedPredictionSerializer в ViewSet, я получаю "Invalid data. Expected a dictionary, but got list."
EDIT:
Я смог переписать метод get_serializer
в моем ViewSet, чтобы установить many = True и передатьСериализатор как мой NestedPredictionSerializer, который распознает список на POST.Хауэбер, теперь я получаю ошибку When a serializer is passed a ``data`` keyword argument you must call ``.is_valid()`` before attempting to access the serialized ``.data`` representation.
You should either call ``.is_valid()`` first, or access ``.initial_data`` instead.