Python LIstSerializer断言器错误

Python LIstSerializer断言器错误,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在尝试使用ListSerializer,以便在一篇文章的列表中创建/反序列化多个对象。我在上遵循了指南,但在访问端点时似乎遇到了此错误 assert self.child不是None,`child``是必需的参数。 python3.7/site-packages/rest\u framework/serializers.py,第592行 我的序列化程序如下所示: class PredictionListSerializer(serializers.ListSerializer):

我正在尝试使用ListSerializer,以便在一篇文章的列表中创建/反序列化多个对象。我在上遵循了指南,但在访问端点时似乎遇到了此错误

assert self.child不是None,`child``是必需的参数。

python3.7/site-packages/rest\u framework/serializers.py,第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)
ListSerializer的初始化过程中抛出了断言错误,但是,序列化程序是在这样的视图集中初始化的

class BulkPredictionViewSet(viewsets.ModelViewSet):
    queryset = Prediction.objects.all()
    serializer_class = PredictionListSerializer
有人熟悉这个问题吗?我想知道我对序列化程序的初始化缺乏o控制(因为我使用的是一个视图集)是否影响了这一点。如果我试图将NestedPredictionSerializer传递到视图集中,我会得到“无效数据。需要字典,但得到列表。”

编辑:

我能够在我的ViewSet中覆盖
get\u serializer
方法,将many=True设置为True,并将序列化程序作为NestedPredictionSerializer传递,它可以识别文章上的列表。但是,在get now上,当一个序列化程序被传递一个“`data``关键字参数时,我收到了一个错误
,在尝试访问序列化的“`.data``表示之前,您必须调用“`.is\u valid()`”。

您应该首先调用“`.is\u valid()”`,或者访问“`.initial\u data`。

只需将
many=True
用于
create


您不需要使用
PredictionListSerializer
,因为
many=True
将自动创建
ListSerializer

当以下关于此阅读的建议与此答案相结合时,我能够获得帖子并开始工作:

我被覆盖的
ViewSet.get\u序列化程序现在如下所示:

    def get_serializer(self, *args, **kwargs):
        if self.request.method.lower() == 'post':
            data = kwargs.get('data')
            kwargs['many'] = isinstance(data, list)
        return super(BulkPredictionViewSet, self).get_serializer(*args, **kwargs)

当我这样做时,POST会按预期工作,但是当我尝试在同一端点上执行GET时,我得到了
AttributeError:'PredictionListSerializer'对象没有属性“fields”
,我试图在else案例中设置
many=False
,但这会引发关于特定字段的另一个错误。当我添加else
many=False
案例时:
在尝试获取序列化程序“NestedPredictionSerializer”上的字段“Sample\u id”的值时,获取了AttributeError。序列化程序字段的名称可能不正确,并且与'list'实例上的任何属性或键都不匹配。原始异常文本是:“list”对象没有属性“Sample_id”。
@RubyJ您需要从
NestedPredictionSerializer
类中删除
list_serializer\u class=PredictionListSerializer
行。如果这对你的问题没有帮助的话,我不明白你的意思。我删除了那行,但仍然得到相同的错误。如果我删除了被重写的
get\u serializer
方法,那么我不会在get上得到异常,但是POST的工作方式与原始问题不同。我甚至删除了整个
PredictionListSerializer
代码。当我重写您描述的
get\u serializer
时,get请求会遇到相同的错误
AttributeError:'ListSerializer'对象没有属性“fields”
class BulkPredictionViewSet(viewsets.ModelViewSet):
    queryset = Prediction.objects.all()
    serializer_class = NestedPredictionSerializer

    def get_serializer(self, *args, **kwargs):
        serializer_class = self.get_serializer_class()
        kwargs['context'] = self.get_serializer_context()
        if self.action == 'create': 
            kwargs['many'] = True
        return serializer_class(*args, **kwargs)
    def get_serializer(self, *args, **kwargs):
        if self.request.method.lower() == 'post':
            data = kwargs.get('data')
            kwargs['many'] = isinstance(data, list)
        return super(BulkPredictionViewSet, self).get_serializer(*args, **kwargs)