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