我正在嘗試在單個 POST 中發送多個 JSON 資料作為串列,例如 -
[
{
"name": "data",
},
{
"name": "data",
}
]
但收到以下錯誤。
{
"non_field_errors": [
"Invalid data. Expected a dictionary, but got list."
]
}
這是我的代碼 -
序列化器.py
class my_serializer_name(serializers.ModelSerializer):
class Meta:
model = my_model
fields = '__all__'
def validate(self, data):
#Performing validation
......
......
視圖集.py
class my_viewset(viewsets.ModelViewSet):
queryset = models.my_model.objects.all()
serializer_class = serializers.my_serializer
http_method_names = ['get', 'post']
def list(self, request):
# Note the use of `get_queryset()` instead of `self.queryset`
queryset = self.get_queryset()
serializer = serializers.my_serializer(queryset, many=True)
return Response(serializer.data)
路由器.py
router = routers.DefaultRouter()
router.register('name' , my_viewset)
如何解決這個問題?
uj5u.com熱心網友回復:
我在 viewsets.py 檔案上添加了 Create 方法,它似乎作業正常。
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data, many=isinstance(request.data,list))
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
uj5u.com熱心網友回復:
一種方法是覆寫 post 方法以指定序列化程式:而不是默認序列化程式,使用 many=True
class my_viewset(viewsets.ModelViewSet):
queryset = models.my_model.objects.all()
serializer_class = serializers.my_serializer
http_method_names = ['get', 'post']
def post(self, request):
serialized = my_serializer_name(data=request.data, many=True)
serialized.is_valid(raise_exception=True)
serialized.save()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/328442.html
標籤:Python 姜戈 接口 休息 Django 休息框架
