django rest framework serializer save()“得到了关键错误信息”

时间:2017-07-31 06:26:19

标签: python django serialization unicode

抱歉转发,但我在第一个问题上犯了很多错误,我认为如果我再次提出更多详细信息并且解释错误更少,我会更好。

我正在尝试在我的自定义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']。
提前谢谢。

2 个答案:

答案 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;

由于某种原因我之前没有被渲染过。这对我的序列化程序有多大影响。但是我通过删除打印行解决了问题,现在它可以正常工作。