自从上次更新 GAE Launcher 以来,它在数据存储上创建的 ID 太大。就像 5330010158992982016 一样,这对我来说是个问题,因为在 Javascript 上这些数字是四舍五入的。
例如,在 JS 上
> a = 533001015899298254645
> 533001015899298270000
读取 JSON,如 [{"pk": 5330010158992982016, "model": ".... }],
$.getJSON(' ...
$.each(data, function(i,item){ ...
item['pk'] = 533001015899298270000 instead of 533001015899298254645
}
}
我不确定在 GAE 服务器上是否会遇到同样的问题。有限制 ID 大小的想法吗?
我正在使用 Django,但我在使用 Django 和 Google Models 时遇到了同样的问题。
更新:
我找到了一个解决方案,不会强制您更改项目的所有 javascript 代码。就我而言,很多。就像每个人都说的那样,最好的办法是使用 de PK(或 ID)作为字符串。但我使用 django 序列化器,在我的版本和 JSON 中,PK 设置为数字。简单的解决方案是在序列化器类上更改此设置(或创建一个扩展原始序列化器的新序列化器并更改此设置):
def end_object(self, obj):
self.objects.append({
"model" : smart_unicode(obj._meta),
"pk" : smart_unicode(obj._get_pk_val(), strings_only=**False**),
"fields" : self._current
})
self._current = None
将 strings_only 设置为 False。它使 JSON 上的 pk 带有引号。所有 JavaScript 代码无需更改即可运行。
问题是...还有其他方法可以强制 django 序列化程序将其作为字符串吗?
最佳答案
在 JavaScript 中无法准确读取/存储这个数字,因为在 JavaScript 中数字实际上是 double float ,最大值为 900,719,925,4740,992
.
你可以
- 以字符串形式返回 id 或
- 使用参数启动
dev_appserver.py
:--auto_id_policy=sequential
关于javascript - GAE Launcher 中的数据库 ID 号很大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15765677/