Django get_or_create 抛出完整性错误
Django get_or_create throwing integrity errors
我很困惑为什么 get_or_create()
方法应该在这里抛出错误,我的序列化程序中有这个:
def 创建(自我,validated_data):
用户,_ = User.objects.get_or_create(id=validated_data['message']['from_user']['id'],
默认值=validated_data['message']['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.']}}
我检查了其他线程,但他们给出的解决方案都是我的代码中已有的,所以我真的很困惑
看来问题是序列化程序无法将 id 隐式转换为 int,即使它们在模型中被指定为 int。因此,每当它尝试查找具有给定 ID 的聊天或用户时,它都找不到(可能使用字符串 ID),但尝试创建具有给定 ID 的新对象将使数据库(在本例中为 postgreSQL)抛出一个完整性错误。添加id = serializers.IntegerField()
解决了问题
我很困惑为什么 get_or_create()
方法应该在这里抛出错误,我的序列化程序中有这个:
def 创建(自我,validated_data): 用户,_ = User.objects.get_or_create(id=validated_data['message']['from_user']['id'], 默认值=validated_data['message']['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.']}}
我检查了其他线程,但他们给出的解决方案都是我的代码中已有的,所以我真的很困惑
看来问题是序列化程序无法将 id 隐式转换为 int,即使它们在模型中被指定为 int。因此,每当它尝试查找具有给定 ID 的聊天或用户时,它都找不到(可能使用字符串 ID),但尝试创建具有给定 ID 的新对象将使数据库(在本例中为 postgreSQL)抛出一个完整性错误。添加id = serializers.IntegerField()
解决了问题