Rest Framework Serializer方法字段

时间:2018-05-08 15:07:54

标签: django python-3.x django-rest-framework

class BagSerializer(serializers.ModelSerializer):
    order_date = serializers.SerializerMethodField()

    class Meta:
        model = Bag
        fields = ('order_date')

    def get_order_date(self, obj):
        print('Order date called', obj)

这是观点:

class BagViewSet(viewsets.ModelViewSet):
queryset = Bag.objects.all()
serializer_class = BagSerializer

    def create(self, request):
        try:
            print('Inside create viewset')
            serializer = self.get_serializer(data=request.data)
            if serializer.is_valid():
                print('serializer passed', serializer.validated_data)
            else:
                print('Serializer failed', serializer.errors)
                return Response(serializer.errors)
        except Exception as e:
        print('exception raised--------', e)
    return Response('Boom')

未调用序列化程序方法字段且其数据未在validated_data中显示,并且序列化程序的is_valid()方法返回True。 为什么不考虑序列化方法字段

1 个答案:

答案 0 :(得分:2)

SerializerMethodField是只读字段。来自docs

  

只读字段包含在API输出中,但不应包含在API输出中   在创建或更新操作期间包含在输入中。任何   ' READ_ONLY'错误地包含在序列化程序中的字段   输入将被忽略。

如果使用某个模型字段重新发布order_date,则可以将DateFieldsource参数一起使用:

order_date = serializers.DateField(source='model_field_name')