我有一个带有重写的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方法被调用!有什么问题?
答案 0 :(得分:0)
视图集中提到的serializer_class为LifeOrderSerializer
,我认为它必须是OrderSerializer
,因为这是覆盖create()
的序列化程序。
如果LifeOrderSerializer
是OrderSerializer
的孩子,请确保您已覆盖create()
LifeOrderSerializer
方法以使其正常工作。
类似的东西:
def create(self, validated_data):
order = super(OrderSerializer, self).create(validated_data)
return order
答案 1 :(得分:0)
ModelViewSet的CreateModelMixin在调用我自己的create function之前引发了异常。 我创建了modelview集,问题解决了!