わーくあうと!

日々の作業でためになったことをアウトプットすることで自分の成長につながればなと。

djangoでModelChoiceField使うとvalidateがおかしくなる件

djangoのModelChoiceFieldを使用してセレクトボックス作ってたのですが、値を選択して登録しようとしても「値は整数でなければなりません。」とか言われて困ったので解決法をメモ。

環境

・django1.3
・python2.6

原因

バリデートするために使用する値が勝手にmodelのオブジェクトに変換されていた事が原因でした。

対処

フォームで入力された数値をオブジェクトに変換している、to_pythonメソッドをオーバーライドして対応しました。

class HogeChoiceField(ModelChoiceField):
    def label_from_instance(self, obj):
        # 表示したい文字列に変換.
        return u'%s(id:%s)' % (obj.name, obj.id)
    def to_python(self, value):
        # オブジェクトに変換しないでそのまま返す.
        return value