javascript - GAE Launcher 中的数据库 ID 号很大?

标签 javascript django google-app-engine google-cloud-datastore django-serializer

自从上次更新 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/

相关文章:

javascript - 使用 setattr() 更新对象实例

java - 对端点使用 Auth

java - 如何在基于 GWT 的项目中包含本地 Java 程序?

javascript - 如何从范围对象中获取所需的数字位数?

javascript - 如何在 vue 模式中显示元素值?

python - UnboundLocalError - 赋值前引用的局部变量 - Django

java - 使用没有类描述符的静态方法

javascript - 从服务器端调用 Javascript,目标给出的不起作用

javascript - angular.factory 不是函数

python - 一个 Django 项目 - 根据域呈现不同的内容