【问题标题】:How to overwrite create method in Viewset to accept my custom serializer in DRF?如何覆盖 Viewset 中的 create 方法以在 DRF 中接受我的自定义序列化程序?
【发布时间】:2021-06-29 00:47:45
【问题描述】:

我需要为我的模型创建一个实例,但在我的 request.data 中,我的序列化程序没有正确的信息。

class CotizacionViewSet(viewsets.ModelViewSet):
   serializer_class = CotizacionSerializer
   permission_classes = [IsAuthenticated]

        def create(self, request):
            serializer = self.serializer_class(data=request.data)
            if serializer.is_valid():
                serializer.save()
                return Response({'message': 'Cotizacion creada correctamente.'}, status=status.HTTP_201_CREATED)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

我的序列化器是

CotizacionSerializer(serializers.ModelSerializer):
    cliente = ClienteSerializer()
    curso = CursoCatalogoSerializer()

    class Meta:
        model = Cotizacion
        exclude = ('state', 'created_date', 'modified_date', 'deleted_date')

我想要从客户和光标处获得序列化程序的信息,但我不知道如何创建 Cotizacion。

【问题讨论】:

    标签: django django-rest-framework django-serializer django-rest-viewsets


    【解决方案1】:

    要创建 Cotizacion,您可以覆盖序列化程序中的 create 方法。

    class CotizacionSerializer(serializers.ModelSerializer):
        cliente = ClienteSerializer()
        curso = CursoCatalogoSerializer()
    
        class Meta:
            model = Cotizacion
            exclude = ('state', 'created_date', 'modified_date', 
                      'deleted_date')
    
        def create(self, validated_data):
            cliente = validated_data.pop("cliente")
            curso = validated_data.pop("curso")
    
            # or you just get the data like
            # cliente = validated_data["cliente"]
            # then create Cotizacion
            cotizacion = Cotizacion.objects.create(**validated_data)
    
            return cotizacion
    

    我不确定 Cotizacion 和 cliente/curso 之间的关系。但是,您可以在此方法中执行所需的操作。如果您能向我们展示模型,我可能会提供进一步的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-13
      • 1970-01-01
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      相关资源
      最近更新 更多