0

私は最近、ジャンゴを使用して製品を構築している会社に参加しました。私は現在、ここに来る少し前にすでに開発されていたアプリの 1 つを担当しています。

アプリ内のエンティティの 1 つに json ディクショナリ属性があり、テキスト フィールドとしてデータベースに保持されています。また、この属性はモデル内でテキスト フィールドとしてマークされます。したがって、ご想像のとおり、正しく処理されていません。

これを変更して、 https://github.com/bradjasper/django-jsonfieldを使用して json フィールドとして設定したかったのですが、これは非常にうまく機能します。

しかし、私は独特の問題に遭遇しました。データベースに保存された以前のデータは正しく処理されませんでした。Unicode データであるため、データベースのテキスト フィールドは次のようになります。

{u'key': u'value'}

エンティティ マネージャーが json フィールドを使用してこれらの値を読み込もうとすると、有効な json 文字列ではないため、もちろん壊れます。

これを克服する方法についていくつかの調査を行いましたが、何も見つかりませんでした。

私の質問:

これを克服する方法について何か提案はありますか?これは、どのような種類のソリューションでもかまいません。

  • そのフィールドを変更して有効なjson文字列に変換することで、一晩実行できるもの。
  • これらの値を正しく処理できるように、json-field コードにいくつかの変更を加えました。

追加情報

django の db バックエンドとして使用postgresします。psycopg2

どうもありがとうございました。

4

1 に答える 1

2

おそらく、テーブル全体を反復処理し、フィールドをロードし、それを実際の Python dict に変換し、json.dumps. 組み込みのように機能しますが、より制限されているため、システムへのリスクが少ないast.literal_evalため、変換段階に適しています。eval

for obj in MyModel.objects.all():
    value = ast.literal_eval(obj.dict_value)
    obj.dict_value = json.dumps(value)
    value.save()
于 2012-06-07T08:40:36.940 に答える