Django

DRFのDecimalFieldから末尾のゼロを除外

Django REST framework (DRF) において、DecimalFieldから末尾のゼロを除去する方法です。具体的には以下のように挙動を変更します。 # 現在 Decimal('0.001000000') >> "0.001000000" # 期待する結果 Decimal('0.001000000') >> "0.001" この機能は以下のPR…

DjangoのマイグレーションでPermissionにアクセス

Djangoのマイグレーション時にPermissionにアクセスする方法をまとめます。 実行環境 Django 3.2 マイグレーションファイルの作成 空のマイグレーションファイルを作成します。 python manage.py makemigrations --empty yourappname from django.db import …

Djangoのmodels.Field.validatorsに引数を渡す

django.db.models.Field.validatorsの関数に引数を与えられるようにします。 例えば以下のようなバリデータにおいて、ハードコードされた数値 100 をモデルフィールド単位に指定できるようにします。 def equal_to_100(value): if value != 100: raise Valid…

WagtailをTransifexで翻訳してみた

DjangoベースのCMSであるWagtailを使い始めましたが、日本語対応がまだまだな印象なので翻訳していきます。 翻訳はWebベースのTransifexが使われているので簡単です。Djangoと同じですね。 docs.wagtail.io You can find a list of currently available tran…

Djangoのフォームウィザードで単一モデルオブジェクトを登録・更新(django-formtools 2.2)

Djangoでモデルオブジェクトの登録・更新機能は、汎用ビューであるCreateViewやUpdateViewで簡単に実装することができます。 しかし扱うモデルフィールドが多い場合、これらのビューは1つの画面に多数のフォームを描画するために使用性が低くなりがちです。 …

DjangoでViewのリクエスト前後に任意の処理を差し込む

デコレータを使用し、DjangoのViewでGETやPOSTリクエストの処理前後に任意の処理を差し込む方法をまとめます。 やりたいこと デコレータの作成 Viewの実装 利用例 事前処理でビューへのアクセス権限を判定 事後処理でレスポンスを更新 まとめ やりたいこと …

DjangoのFixtureで投入するユーザ・グループに権限を設定

はじめに パーミッションの作成 ユーザの作成 グループの作成 はじめに DjangoのFixtureでdjango.contrib.authのUserやGroupにPermissionを設定する方法を確認しました。 パーミッションの作成 まずは適当なパーミッション をModel.Meta.permissionsで作成し…

PythonでExcelのセル入力&編集したExcelブックをDjangoでダウンロード(openpyxl)

はじめに Excelのセルを入力するスクリプト Djangoのビューで編集したExcelファイルをダウンロード はじめに openpyxlを使ってPythonでExcelファイルを編集します。 $ pip install openpyxl Excelのセルを入力するスクリプト 以下のスクリプトでは次の単純な…

AnsibleでUbuntu18.04にDjangoアプリをデプロイ(Apache+PostgreSQL+Miniconda)

はじめに Ansibleのインストール ディレクトリ構成 作成したプレイブック 共通設定 変数 環境変数 タスク aptパッケージのアップデート、アップグレード タイムゾーンの設定 ユーザの追加 SSH接続の設定 Minicondaのインストール Djangoプロジェクトのアップ…

DjangoでDockerコンテナのログをテキストエリアに流し込む(Server-Sent Events)

はじめに 前提 ビューの実装 テンプレートの実装 実行例 さいごに はじめに DjangoでDockerコンテナのログをテキストエリアに出力する方法をまとめます。 前提 Dockerコンテナの操作には docker-py を使います。 github.com django==3.0.8 docker==4.2.0 ビ…

Djangoで登録/更新/検索フォームにカレンダコントロールを設置

はじめに 前提 サンプルアプリの実装 アプリの作成 モデル ビューとURL モデルフォーム フィルタ テンプレート ベーステンプレート 登録/更新画面のテンプレート 登録画面の動作確認 更新画面の動作確認 検索画面のテンプレート 検索画面の動作確認 カレンダ…

Djangoでsettings.pyの機密情報を管理する方法

はじめに プロジェクトの作成 settings.pyの設定内容 機密情報をJSONファイルで管理 1. 機密情報を管理するJSONファイル secrets.json の生成スクリプトを用意 2. settings.py で secrets.json の設定値を参照するように変更 3. 実行環境ごとに 1. のスクリ…

Django 2でモデルにMeta.orderingを指定すると.values().annotate()が不正な結果を返す問題

はじめに 問題 原因 対策 まとめ はじめに Django(2.1.7)で集計処理( values().annotate() )が Meta.ordering を追加した途端に誤った結果を返すようになりました。 問題 例として以下の Foo モデルを用意します。 ここで created_at フィールドを Meta.…

DataTables(+Django)でAjax通信

はじめに DataTablesの設置 ajax オプション columns オプション deferRender オプション Ajax通信 クライアントサイド サーバサイド Ajaxリロード時のプログレス表示 エラー処理 (2020/07/26追記) ヘッダ・ボディ間のスペース除去 はじめに DataTables 1.10…