当我在返回之前打印id时,代码会打印正确的值(与mongo中的id相同(。但是客户端接收到不同的id。
我的查询代码:
def resolve_account(root, info, **kwargs):
email = kwargs.get('email', None)
password = kwargs.get('password', None)
accounts = AccountModel.objects(email=email, password=password)
if accounts.first() is None:
return ResponseMessageField(is_success=False, message="Not found")
print(accounts[0].id)
return AccountResults(accounts=[AccountField(id=account.id,
name=account.name)
for account in accounts])
控制台打印:`5e5f28a41e92b7cdb5cf30ea'
但我的客户收到了:
{
"data": {
"accountLogin": {
"accounts": [
{
"name": "test1",
"id": "QWNjb3VudEZpZWxkOjVlNWYyOGE0MWU5MmI3Y2RiNWNmMzBlYQ=="
}
]
}
}
}
python 3.6.9
mongoengine 0.1.9
graphene 2.1.8
graphene_mongo 0.1.1
flask 1.1.1
如果使用自动递增ID,这实际上是graphene-django
的优势。
无论如何,它使用base64编码对它们进行编码,要获得真正的值,您可以这个在香草JS:
>> atob('QWNjb3VudEZpZWxkOjVlNWYyOGE0MWU5MmI3Y2RiNWNmMzBlYQ==')
>> "AccountField:5e5f28a41e92b7cdb5cf30ea"
因此,如果你想突变一些东西,并且你有不是bas64编码的ID,你必须做的是:
>> btoa("AccountField:5e5f28a41e92b7cdb5cf30ea")
>> "QWNjb3VudEZpZWxkOjVlNWYyOGE0MWU5MmI3Y2RiNWNmMzBlYQ=="
在python中,石墨烯提供了一个导入to_global_id
和from_global_id
来来回转换base64编码值和真实ID。