2

GAE Launcher の前回の更新以来、データストアに作成される ID が大きすぎます。5330010158992982016 のように、Javascript ではこれらの数値が丸められるため、これは私にとって問題です。

たとえば、JS では

> a = 533001015899298254645
> 533001015899298270000

[{"pk": 5330010158992982016, "model": " .... }] のような JSON の読み取り、

$.getJSON(' ...

  $.each(data, function(i,item){ ...

    item['pk'] = 533001015899298270000 instead of 533001015899298254645
  }
}

GAE サーバーで同じ問題が発生するかどうかはわかりません。IDサイズを制限するアイデアはありますか?

Django を使用していますが、Django と Google モデルで同じ問題が発生しています。

アップデート:

プロジェクトのすべての JavaScript コードの変更を強制しない解決策を見つけました。私の場合は多いです。誰もが言うように、最良の方法は 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シリアライザーに強制的に文字列として配置させる他の方法はありますか?

4

2 に答える 2

1

何らかの奇妙な理由でLipiの答えがカバーされなかった場合は、すべての値を文字列にキャストする別のアプローチを試すことができます。だからあなたは持っているでしょう

[{"pk": "5330010158992982016", "model": " .... "}],

おそらく次の部分は必要ないことを意味するAjax呼び出しを使用しているようですが、レンダリング時にJavaScript変数を作成する場合{{my_id}}のように、代わりにDjango変数を文字列にすることができます。'{{my_id}}'

AppEngine チームはこの問題を認識しており、更新プログラムを本番環境に導入する前に解決する予定です。

于 2013-04-02T14:09:55.223 に答える