【问题标题】:Django get_or_create throwing integrity errorsDjango get_or_create 抛出完整性错误
【发布时间】:2016-12-25 00:13:47
【问题描述】:

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

定义创建(自我,验证数据): 用户,_ = User.objects.get_or_create(id=validated_data['message']['from_user']['id'], defaults=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.']}}

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

【问题讨论】:

    标签: python django django-models django-serializer


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-22
      • 2013-03-18
      • 2021-09-27
      • 2015-06-17
      • 1970-01-01
      • 2016-04-10
      • 2012-11-15
      • 1970-01-01
      相关资源
      最近更新 更多