2016-12-25 95 views
1

我很困惑,为什么get_or_create()方法应该在这里抛出的错误,我有这个在我的串行:Django的get_or_create抛出完整性错误

高清创建(个体经营,validated_data): 用户,_ =用户。 objects.get_or_create(ID = validated_data [ '消息'] [ 'FROM_USER'] [ 'ID'], 默认= validated_data [ '消息'] [ 'FROM_USER'])

chat, created = Chat.objects.get_or_create(id=validated_data['message']['chat']['id'], 
              defaults=validated_data['message']['chat']) 

message, _ = Message.objects.get_or_create(message_id=validated_data['message']['message_id'], 
              defaults={'message_id': validated_data['message']['message_id'], 
              'from_user': user, 
              'date': validated_data['message']['date'], 
              'chat': chat, 
              'text': validated_data['message']['text']}) 
update, _ = Update.objects.get_or_create(update_id=validated_data['update_id'], 
             defaults={'update_id': validated_data['update_id'], 
             'message': message}) 

return update 

它说的是:{u'from': {'id': [u'User with this id already exists.']}, u'chat': {'id': [u'Chat with this id already exists.']}}

我检查过其他线程,但他们都给了解决方案是我已经在我的代码,所以我真的很困惑

回答

1

看来问题是,序列化程序不能隐式地将id转换为整数,即使它们被指定为ints在模型中。所以每当它试图寻找一个具有给定id的聊天或用户时,它都找不到一个(可能使用字符串id的),但试图用给定的id创建一个新对象将会使db(在这种情况下是postgreSQL)抛出一个完整的错误。加入id = serializers.IntegerField()解决了问题