Django get_or_create抛出完整性错误

时间:2016-12-25 00:13:48

标签: python django django-models django-serializer

我很困惑为什么get_or_create()方法应该在这里抛出错误,我在序列化器中有这个:

def create(self,validated_data):     user,_ = User.objects.get_or_create(id = validated_data [' message'] [' 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 个答案:

答案 0 :(得分:1)

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