我有一个Rant
模型与Category
使用链接到它ManyToManyField
。我已经序列化了它,但问题是这个错误:
{
"categories": [
"Expected a list of items but got type \"str\"."
]
}
这些是我的序列化器:
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = "__all__"
class RantSerializer(serializers.ModelSerializer):
categories = CategorySerializer(many=True)
class Meta:
model = Rant
fields = ('rant', 'slug', 'categories')
My post
方法是这样的:
def post(self, request, format=None):
serializer = RantSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
我在这里做错了什么?
我也遇到过类似的问题。请执行以下操作来解决您的问题
- 安装 drf-writable-nested
pip install drf-writable-nested
- 像这样重写你的序列化器
# --- snip ---
from drf_writable_nested.serializers import WritableNestedModelSerializer
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = Category
fields = "__all__"
class RantSerializer(WritableNestedModelSerializer):
categories = CategorySerializer(many=True)
class Meta:
model = Rant
fields = ('rant', 'slug', 'categories')
# ---snip ----
这里的问题是导入并实现WritableNestedModelSerializer
班级。另请注意,serializers.ModelSerializer
您想要执行嵌套有效负载的序列化器上的超类已被替换。
- 尝试执行 API 调用。你应该可以走了。
有关更多信息,请参阅此存储库的自述文件here https://github.com/beda-software/drf-writable-nested
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)