Django Rest框架序列化程序方法字段

Django Rest框架序列化程序方法字段,django,python-3.x,django-rest-framework,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',

这是一种观点:

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)
未调用serializer方法字段,其数据也未显示在已验证的\u数据中,并且序列化程序的is\u valid()方法返回True。 为什么不考虑序列化程序方法字段是只读字段。从:

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

如果
order\u date
与某个模型字段关联,则可以将
DateField
source
参数一起使用:

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')

Serializer method字段是只读的-因此它们不会在验证数据中。请注意,
字段
的值应该是元组,而不是您的示例中的字符串。我有一个json,希望从中提取vale并将其插入数据库。因此serializer方法字段将从json中提取并返回该值。我该怎么做?@Arjunsingh确实与某个模型的字段相关。@Arjunsingh因此您可以简单地使用
DateField
。我已将其声明为模型中的日期字段。那么您的意思是说,在序列化程序的create方法中,从request.data中的json中提取日期并保存序列化程序?@Arjunsingh,因为它只在将对象序列化为json时调用。不是在创建json对象的过程中。
order_date = serializers.DateField(source='model_field_name')