[英]drf use different serializer show 'You cannot call `.save()` after accessing `serializer.data`
我想先發布問題信息,然后在“opt_ser.save()”處發布帶有問題 ID 的選項列表,它顯示“'您在訪問serializer.data
后無法調用.save()
。如果您需要在提交到數據庫之前訪問數據然后改為檢查 \'serializer.validated_data\'。'"
class QuestionAddApiView(APIView):
def post(self, request, *args, **kwargs):
option_list = request.data.pop('option_list')
question_serializer = QuestionReadAndWriteSerializer(data=request.data)
try:
if question_serializer.is_valid():
question_serializer.save()
question = question_serializer.instance
opt_response = []
for option_item in option_list:
option_item['question'] = question
opt_ser = OptionSerializer(data=option_item)
if opt_ser.is_valid():
opt_ser.save()
opt_response.append(opt_ser.data)
question['option_list'] = opt_response
return BResponse(question, status=status.HTTP_200_OK)
except Exception as e:
return BResponse(question_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
您可以 append validated_data
數據而不是data
。
這種在 object 上保存並創建其相關對象的模式非常常見,在 DRF 中,您可以執行這些我覆蓋的父對象創建並從那里處理創建子對象。
我建議您覆蓋QuestionReadAndWriteSerializer
的create
方法。 你遵循官方文檔,用於可寫嵌套序列化器
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.