nobu blog

プログラミングやゲームの話など。

*



【Python】DjangoでModelFormからバリデーション時にpkを取り出す

   

概要

Djangoでフォーム入力をさせる際に、入力された値によるバリデーションとは別に、DBにアクセスして重複データが無いかチェックする事などがあるかと思います。
新規データの場合には、気にする必要がありませんが、更新データの場合にはDBから値を取り出す際に自分自身のデータは除外する必要があります。(ケースによります)

その際には、既存データの主キーとなるpkを取り出してクエリに渡さないといけません。
その際のpkの取得方法のメモです。

スポンサーリンク

方法

下記のような開始日時と終了日時をデータとして持つModelを例に説明します。
下記のModelにはget_rangesといった、指定した範囲の時刻のデータを取り出すメソッドを定義します。
引数にはpkで特定のデータは除外できるようにします。

上記のモデルに対応するModelFormを継承したフォームを定義します。
cleanメソッドをオーバーライドする事で、独自のバリデーションを実装します。
cleaned_dataから入力された値を取得できますが、pkに関してはinstance.pkから取得。

 - python