簡體   English   中英

drf 使用不同的序列化程序顯示“訪問 `serializer.data` 后無法調用 `.save()`

[英]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 中,您可以執行這些我覆蓋的父對象創建並從那里處理創建子對象。

我建議您覆蓋QuestionReadAndWriteSerializercreate方法。 你遵循官方文檔,用於可寫嵌套序列化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM