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。 为什么不考虑序列化方法字段
答案 0 :(得分:2)
SerializerMethodField
是只读字段。来自docs:
只读字段包含在API输出中,但不应包含在API输出中 在创建或更新操作期间包含在输入中。任何 ' READ_ONLY'错误地包含在序列化程序中的字段 输入将被忽略。
如果使用某个模型字段重新发布order_date
,则可以将DateField
与source
参数一起使用:
order_date = serializers.DateField(source='model_field_name')