抱歉转发,但我在第一个问题上犯了很多错误,我认为如果我再次提出更多详细信息并且解释错误更少,我会更好。
我正在尝试在我的自定义django rest框架序列化器上使用save方法
我在序列化程序中有一个.create()方法,我的views.py看起来像这样(简化):
def some_method():
validated_data = {
'id': some_integer_id,
'created_at': "some text"}
context_data = {
'user': request.user.id}
obj_serialized = MyCustomSerilizer(data=validated_data, context=context_data)
if obj_serialized.is_valid():
try:
obj_serialized.save()
print Response(obj_serialized.data)
return Response(obj_serialized.data)
except BaseException as e:
raise APIException(detail=e.message)
else:
raise ValidationError(obj_serialized.errors)
这会返回一个例外:
尝试在序列化程序`MyCustomSerializer`上获取字段`created_at`的值时获得KeyError。 序列化程序字段可能名称不正确,并且与`dict`实例上的任何属性或键都不匹配。 原始异常文本是:u'created_at'。
这是我的serilizer:
class MyCustomSerializer(serializers.Serializer):
id = serializers.IntegerField()
created_at = serializers.CharField()
def create(self, validated_data):
print validated_data['created_at']
user = self.context.get('user')
return {'id': validated_data['id']}
create method的第一行正确打印created_at字段的值。我用dict发送的数据是unicode,所以dict的键也转为unicode但是我怀疑是这样的,因为我可以打印validated_data ['created_at']。
提前谢谢。
答案 0 :(得分:1)
为什么你尝试返回不存在字段'消息'?可能需要改变它
def create(self, validated_data):
print validated_data['created_at']
user = self.context.get('user')
return {'id': validated_data['id'], 'created_at': validated_data['created_at']}
# ^^^^
答案 1 :(得分:0)
所以我找到了答案。问题实际上来自于部分:
use warnings;
由于某种原因我之前没有被渲染过。这对我的序列化程序有多大影响。但是我通过删除打印行解决了问题,现在它可以正常工作。