django rest的viewset调用默认的序列化程序的create方法而不是overriden方法

时间:2017-12-10 14:08:51

标签: python django django-rest-framework

我有一个带有重写的create方法的嵌套序列化程序:

class OrderSerializer(serializers.ModelSerializer):
    data_model=Order
    user = UserSerializer(many=False)


    class Meta:
        model = Order
        fields = ['uid', 'user','price']

    def create(self, validated_data):
        validated_data=validated_data.pop('user')
        order=self.data_model.objects.create(**validated_data)
        order.user=self.context['request'].user
        order.save()
        return order

class LifeOrderSerializer(OrderSerializer):
   data_model =LifeOrder

   class Meta(OrderSerializer.Meta):
       model = LifeOrder
       fields = OrderSerializer.Meta.fields + [ "birth_year",
                                            "contract_duration",]

并在views.py

class OrderViewSet(viewsets.ModelViewSet):
    queryset_model = LifeOrder
    serializer_class = LifeOrderSerializer
    def get_queryset(self):
            self.queryset_model.objects.all()

但是当我发送一个post请求创建时,模型序列化器defualt create方法被调用!有什么问题?

2 个答案:

答案 0 :(得分:0)

视图集中提到的serializer_class为LifeOrderSerializer,我认为它必须是OrderSerializer,因为这是覆盖create()的序列化程序。

如果LifeOrderSerializerOrderSerializer的孩子,请确保您已覆盖create() LifeOrderSerializer方法以使其正常工作。

类似的东西:

def create(self, validated_data):
    order = super(OrderSerializer, self).create(validated_data)
    return order

答案 1 :(得分:0)

ModelViewSet的CreateModelMixin在调用我自己的create function之前引发了异常。 我创建了modelview集,问题解决了!