Closed3

記事投稿リハビリ用の雑知見置き場

かけるんかけるん

記事投稿力が落ちているので、
リハビリ的に雑に知見をまとめていく

かけるんかけるん

DRFのエラーメッセージ変更

1年近く仕事でDRFを触っていたにも関わらず、最近になってデフォルトで出力されるエラーメッセージの微妙さに気がついた(普段はフロントや個別のバリデーションでメッセージを出してた)

例えば

class UserSerializer(serializers.ModelSerializer):
    name = serializers.CharField(max_length=30) # 30字を超えるとエラー

    class Meta:
        model = User

みたいなシリアライザがあったとしたら、
nameに31字以上の文字列が入ったときにはエラーが出力される
その時のエラーメッセージが
この項目が30文字より長くならないようにしてください。
なのだ

なんだ「この項目」って
そんなエラーメッセージをフロントで出されても...という感じだ

labelをつけてやればもしかして「この項目」が置き換わったりしないかな?

name = serializers.CharField(label="氏名", max_length=30)

と思ったけどだめだった

調べてみた感じ、Fieldクラスのerror_messagesにエラーメッセージを設定してあげれば良いみたい

name = serializers.CharField(max_length=30, error_messages={"max_length": "氏名は30文字以内で入力してください。"})

これでエラーメッセージが設定できた

「30字」を動的にしたいなと思ったらできるみたい(流石にできなかったら困る)

name = serializers.CharField(max_length=30, error_messages={"max_length": "氏名は{max_length}文字以内で入力してください。"})

残念ながら、error_messagesに設定する値のkeyが公式ドキュメントを漁っても見つけられなかった(ありましたら教えていただけると助かります)

コードをたどってみると、CharFieldの場合は
required null invalid blank max_length min_length
をkeyにすれば良いということはわかった

エラーメッセージ内で置き換わる対象の文字列は正直良くわからない...
{max_length} {min_length})くらいしかわかんね)

かけるんかけるん

DjangoのQuerySetでJSONFieldをfilterする

JSONFieldで定義された項目を用いてfilterしたい時がある

こんな感じのモデルがあるとする

class Hoge(PostgresModel):
    fuga = models.JSONField()

fugaには以下のようなデータが保存されているとする

{
   "xxx": 0 or 1,
}

xxxの値でfilterしたいときは以下のように記述する

 Hoge.objects.filter(fuga__xxx=0)

割と単純な書き方ができるんだなぁと感心した

このスクラップは2024/02/09にクローズされました