2016-02-17

DjangoでModelFormのカスタマイズ

DjangoでModelFormを使っていて、FormFieldを追加するとき。Modelのinstanceとの値のやりとりをどうしようか迷う。どうやら、初期値はModelFormの__init__()でモデルからフォームに渡してやり、フォームからモデルへの値の変更はModelFormの_post_save()でやるのが良さそう。

理解可能なように説明すると面倒くさいからできそうにない。

class ArticleForm(forms.ModelForm):
 
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.fields["text"].initial = self.instance.get_nice_text()
    
    def _post_clean(self):
        super()._post_clean()
        self.instance.set_nice_text(self.cleaned_data["text"])


という感じだといいのではないか。

0 件のコメント: