[初学者向け]Django Rest FrameworkでPOSTリクエストを送信した時、Cannot be null と出たときの至極些細なミス
はじめに
私は現在、フロントエンドをReact
で、バックエンドをDjango
で成果物を作成しています。
API通信を行い、POSTリクエストを送信する際に、すごくしょうもないですが、初学者ならやってしまいそうなミスに遭遇したので、自分の戒めと、同様のエラーに遭遇した人への情報共有のために記事に残しておこうと思います。
エラーケース
導入
実際に私がエラー時に使用していたコードを基に説明します。
class Keyword(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Meta:
db_table = "keywords"
まずは、Django
のアプリ内で使うモデルを定義します。
フロント側でReact
やVue
を実装する予定なら、JSON
としてデータをやりとりする必要があるのでdjangorestframework
が必要です。
そして、djangorestframework
でコードを書いていくなら、JSON
データをやりとりするためにSerializer
を作る必要があります。
ちなみに、Serializer
の役目は、フロント側から送られてきたJSON
データをサーバーが読めるように変換し、また逆にサーバーから送るクエリセットをJSON
データに変換するものです。
どこかでフロントエンドはJSON色付け係と揶揄されているTwitterの投稿を見かけましたが、その名の通り近年のモダンなフロント側ではJSON
データがやりとりの元なので、Serializer
は必須というわけです。
class KeywordSerializer(serializers.ModelSerializer):
class Meta:
model = Keyword
fields = ["id", "name"]
def validate_name(self, value):
if len(value) <= 1:
raise serializers.ValidationError("キーワードは必ず2文字以上で設定してください")
これがKeyword
モデルのSerializer
です。
サーバー側のValidationはSerializer
で行います。
私より優秀な皆様ならどんな内容かこの時点で検討がついたかと思います。笑
エラーの内容
エラーが起きたのは、題名の通り私がPOSTリクエストを送信した時です。つまり、Keyword
モデルを新たに作ろうとした時です。
{
"name" : "白スニーカー"
}
上記のKeyword
モデルを基にPOSTMAN
等でリクエストを送るのならば上記のようになります(JSON
形式)。最もシンプルな形と言えるぐらい簡潔なもので、間違えようがありません。
しかし私は、以下のエラーをゲットしました。
1048, "Column 'name' cannot be null"
値がnull
になっているといわれました。何度やっても同じことが言われるので、モデル作成と関わるModel
,Serializer
を確認しました。そこでエラーが判明しました。
class KeywordSerializer(serializers.ModelSerializer):
class Meta:
model = Keyword
fields = ["id", "name"]
def validate_name(self, value):
if len(value) <= 1:
raise serializers.ValidationError("キーワードは必ず2文字以上で設定してください")
## 現場はこちらです
return value
事件は会議室なんかではなく、Serializer
で起きていた様です。
先ほどValidationはSerializer
で行うと書きましたが、Serializer
におけるValidationはメソッドで行われるのでreturnを返さなければいけません。
すぐに原因が判明しましたが、検索をしても案外このケースのエラーはヒットしなかったので共有させていただきました。
まとめ
Serializer
でValidationを実装するときは、もっと言うなら関数を書くときはreturnを書くのを忘れない様に注意する
この一言に尽きます。
至極しょうもないエラーではありますが、お時間をいただき最後までみてもらいありがとうございました。
間違いや、その他注意した方がいいよくあるエラーなど、なんでも良いのでコメントをくださると嬉しいです。
ありがとうございました。
Author And Source
この問題について([初学者向け]Django Rest FrameworkでPOSTリクエストを送信した時、Cannot be null と出たときの至極些細なミス), 我々は、より多くの情報をここで見つけました https://qiita.com/Toshiyuki023Hori/items/8017ae0d98a66afca7fe著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .