我自从更新 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 模型时遇到了同样的问题。
更新:
我找到了一个解决方案,它不会强迫您更改项目的所有 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 序列化程序将其作为字符串?