今回のお題
今回はdjangoに用意されているcleaned_dataという変数についてまとめます。
この記事を書くに至った理由はCustomUserの実装にあたってcleaned_dataが必要だったからであり、基本的には自分用のメモとして残します。
cleaned_dataとは
まず、cleaned_dataとは何かというと、「あるオブジェクトの属性値の中でバリデーションをクリアしたものだけを辞書形式で格納したもの」になります。
具体的にみていきましょう(ソースコードのimport部分は省略しています)。
class Hoge(models.Model):
name = models.CharField(null=False, max_length=20)
age = IntegerField()
hoge = Hoge()
hoge.name = "hoge"
hoge.age = "30"
print(hoge.cleaned_data)
# 結果:{}
# バリデーション前なのでcleaned_dataは空
hoge.is_valid()
print(hoge.cleaned_data)
# 結果:{ "name": "hoge" }
# バリデーションをクリアしたnameのみが格納されている。
上記の例ではHogeクラスのインスタンスを作り、そこに対してバリデーションを実行しています。
ageはIntegerFieldであるにもかかわらず文字列"30"が代入されたためにcleaned_dataからはじかれています。
また、is_valid()関数が呼び出される前の時点ではcleaned_dataは空であることに気をつけてください。
終わりに
以上でcleaned_dataの解説を終わります。
この知識はCustom Userの実装過程でsaveメソッドを上書きするために必要です。
そちらについても近々まとめるのでよろしければお読みください。