DjangoでModelに設定したmax_lengthの値をFormのmax_lengthに指定する

ModelFormを使えば、何もしなくても設定されるはずだけど、明示的にFormFieldを指定しなおしている場合とか、forms.Formを使ってる場合とかは、max_lengthを2箇所に書くことになってしまう。


解決方法を調べてたら、Model側のmax_lengthの値を取得してFormFieldに渡す方法が見つかった。

from models import *

class MyForm(forms.Form):
    some_field = forms.CharField(label='Some Field', 
            max_length=SomeModel._meta.get_field('some_field').max_length)


FormFieldのmax_lengthを指定しておくと、テンプレートでfieldを表示するときにちゃんとmaxlength属性がつくようになる。



参考 : Django: model maxlength and form maxlength - Stack Overflow