Djangoで日本語文字列のQuerySetを五十音順でソートする
DjangoのWEBアプリケーションでQuerySetの表示順を五十音順にしたら、開発環境では五十音順で表示されているのに本番環境では五十音順になっていないときの対処法です。(中途半端に五十音順になっていて、4、5件毎に […]
Filter by Category
DjangoのWEBアプリケーションでQuerySetの表示順を五十音順にしたら、開発環境では五十音順で表示されているのに本番環境では五十音順になっていないときの対処法です。(中途半端に五十音順になっていて、4、5件毎に […]
iPhoneとiPadから使えるPythonistaというアプリを使ってFlaskからHello World!する方法です。 Pythonistaはプリインストールされたモジュールが充実していて、バージョンも2.7か3. […]
Djangoでモジュールを作りviews.pyからimportして呼び出す方法です。 同じ処理を何度も書いたり、同じ処理を複数回呼び出したりするときは、その処理をモジュール化してviews.pyからimportして呼び出 […]
DjangoでQuerySetで取得したデータをそのままpandasのDataFrameに変換する方法です。データを成形する必要がないときや、とりあえず全件CSV化したいときなどに便利な方法です。
Djangoのテンプレートに範囲を渡す方法です。指定した月の全日数を表示したいときや日毎に処理をして表示させたいときなどにrangeに範囲を入れてテンプレートに渡せます。 views.py 現在の年と月を指定して総日数を […]
Django上でPandasで作ったCSVをダウンロードさせる方法です。df.to_csv(“filename.csv”)でも出力は出来ますがダウンロードは出来ないので、ダウンロード機能が必要な場 […]
リストをループで生成してリスト同士を計算する方法です。サンプルでは、[0, 1, 2, 3, 4]のリストを3個生成して計算します。 loopOneで3を代入しているのでリストを3回計算します。loopTwoで5を代入し […]
テンプレート用の既存PDFの上から文字を上書きしてダウンロードする方法です。 attachmentをつけるとリンクを押したら即ダウンロードが始まります。
DjangoのFormに初期値を設定する Djangoで生成したFormをhiddenにしたまま、あらかじめ設定しておいた初期値が入ったvalueをPOSTする方法です。 forms.pyでinitial=’ […]
DjangoのWEBアプリケーションでQuerySetの表示順を五十音順にしたら、開発環境では五十音順で表示されているのに本番環境では五十音順になっていないときの対処法です。(中途半端に五十音順になっていて、4、5件毎に五十音順に表示されていることが多い)
五十音順にならない原因は、開発環境ではSQLite、本番環境ではPostgreSQLという異なるデータベースを使用しており、PostgreSQLはデフォルトでCOLLATEの設定がen_US.UTF-8になっているためで、この状態ではソートをかけても五十音順になりません。COLLATEの設定を変更することで、PostgreSQLでも五十音順で表示することができます。
まず始めにDjangoのディレクトリで以下を実行します。
python manage.py dbshell
現在のテーブル情報を確認します。今回はサンプルとしてテーブル名をguestとしています。
DATABASE=> \d guest
テーブル情報が表示されます。Collationが空欄となっており、何も指定されていません。
Table "public.guest"
Column | Type | Collation | Nullable | Default
-----------------+--------------------------+-----------+----------+----------------------------------
id | integer | | not null | nextval('guest_id_seq'::regclass)
firstName | character varying(10) | | |
firstNameKana | character varying(10) | | |
lastName | character varying(10) | | |
lastNameKana | character varying(10) | | |
以下のコマンドでデフォルトのCOLLATEがどのように設定されているか確認できます。
DATABASE=> SHOW LC_COLLATE;
COLLATEの設定を変更します。
DATABASE=> ALTER TABLE guest ALTER COLUMN "lastNameKana" TYPE VARCHAR COLLATE "C";
大文字が含まれている時は””で囲まないと小文字に変換されてしまいエラーになります。
COLLATEの設定が更新されたかテーブル情報を確認します。
DATABASE=> \d gest
Collationの欄に”C”が表示され更新されたのが確認できます。
Table "public.guest"
Column | Type | Collation | Nullable | Default
-----------------+--------------------------+-----------+----------+----------------------------------
id | integer | | not null | nextval('guest_id_seq'::regclass)
firstName | character varying(10) | | |
firstNameKana | character varying(10) | | |
lastName | character varying(10) | | |
lastNameKana | character varying | C | |
これで日本語文字列を五十音順に表示することができます。
COLLATEの設定を更新する際に、COLLATE の後ろを”ja_JP.UTF-8″;とすると以下のエラーが出たので今回は”C”にしています。
ERROR: collation "ja_JP.utf8" for encoding "UTF8" does not exist
群馬県でPythonを使ったAIやソフトウェアを開発している株式会社ファントムが運営しています。
メーリングリストに登録するとファントムの最新情報をお届けします
お客様のメールアドレスを共有することはありません
Comments