Que*_*lan 9 python django django-rest-framework
在2.x中我们有一个看起来像的序列化器:
class FooSerializer(serializers.ModelSerializer):
bar = serializers.PrimaryKeyRelatedField()
class Meta:
model = Foo
Run Code Online (Sandbox Code Playgroud)
这实际上能够处理批量创建(传递list
作为JSON帖子请求的主体).在3.x中,此端点已损坏.我试图实现类似于DRF文档的东西
class FooListSerializer(serializers.ListSerializer):
def create(self, validated_data):
foos = [Foo(**item) for item in validated_data]
return Foo.objects.bulk_create(foos)
class FooSerializer(serializers.ModelSerializer):
bar = serializers.PrimaryKeyRelatedField(
queryset=Bar.objects.all()
)
class Meta:
model = Foo
list_serializer_class = FooListSerializer
Run Code Online (Sandbox Code Playgroud)
虽然这适用于单个创建请求,但当我尝试传递列表时,我收到错误:
AttributeError: 'FooListSerializer' object has no attribute 'object'
Run Code Online (Sandbox Code Playgroud)
我已经看到一些__init__
超级硬件,但似乎ListSerializer
在3.x中创建了类,必须有一个更清晰的方法来做到这一点.提前致谢.
你没有展示你的代码是如何创建一个FooSerializer
实例的。在Django的REST框架3文档说:
要序列化查询集或对象列表而不是单个对象实例,您应该
many=True
在实例化序列化程序时传递标志。然后,您可以传递要序列化的查询集或对象列表。
因此,您的代码似乎应该检测数据是否包含一个或多个实例,并且:
serializer = FooSerializer()
处理一个实例,或serializer = FooSerializer(many=True)
处理许多实例的列表。显式优于隐式 :-)
归档时间: |
|
查看次数: |
5003 次 |
最近记录: |