2

従来のMySQLデータベースの上にdjango-adminを設定しています。

データベースは、latin-1でエンコードされていることを宣言します。データベースに入力されたデータの一部は実際にはlatin-1ですが、実際にはUTF-8です。これは、次のような破損した文字として表示されます:é€äö

レガシーアプリケーションはこれらのエラーを隠すためにいくつかの黒魔術を行い、データベースを変更できません。

latin-1で破損したUTF-8を実際のUTF-8に変換できるPythonライブラリを見つけましたftfy。たとえば、上記の文字は「é€äö」に変換されます。データベースからロードするすべてdjango.db.models.CharFieldのデータに使用したい。django.db.models.TextFieldどうやってするの?

サブクラスdjango.db.models.CharField化しようとしdjango.db.models.TextFieldましたが、データベースからのデータをインターセプトする場所がわかりませんでした。FTFYCharField最適なソリューションは、データベースから取得したデータを常に修正するようなものです。

4

2 に答える 2

1

読み取り専用であると仮定すると、あなたが探しているのはカスタムモデルフィールドの記述だと思います。特に、「データベース値をPythonオブジェクトに変換する」セクションを参照してください。この.to_python()メソッドでは、DBから読み取ったすべてのフィールドに対して必要な操作を実行できます。

書き込み(および奇妙さの維持)も必要な場合は、保存する前に値の前処理に関するセクションを参照してください。

于 2012-12-17T02:11:23.600 に答える
1

私はこれがオフになっているかもしれないことを知っています...しかし多分いくつかの頭痛を防ぎます

「Unicode」関連の変更を行う前に、Unicodeの意味を理解してください。また、「ö」==öと書いたのは、UnicodeがUTF-8メソッドでエンコードされている場合にのみ正しいことに注意してください。

于 2013-02-08T21:53:30.597 に答える