我很困惑为什么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.']}}
我已经检查了其他线程,但是他们所有的解决方案都是我在代码中已经拥有的,所以我真的很困惑
答案 0 :(得分:1)
看起来问题是序列化程序无法隐式地将id转换为int,即使它们在模型中被指定为int。因此,每当它试图寻找具有给定id的聊天或用户时,它找不到一个(可能使用字符串id)但尝试创建具有给定id的新对象将使db(在这种情况下为postgreSQL)抛出完整性错误。添加id = serializers.IntegerField()
解决了问题