はじめに(前提)
- Django公式チュートリアルのソースを元にしています。
- 管理画面側のモデルにバリデーションを実装する方法をまとめています。
モデル
- Question
- Choice(←今回バリデーションを実装するモデル)
やりたいこと
-
VOTES
が負数の場合に、バリデーションエラーを実装したい。- 現状は負数の場合でも保存されてしてしまう。
実装
- 実装したいモデルの
Class
にclean
メソッドを追加する
# models.py
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self) -> str:
return self.choice_text
# この行以下を追加
def clean(self):
if (self.votes < 0):
raise ValidationError({"votes": "投票数は0以上で入力してください。"})
補足
以下のように記載してしまうと、参考画像のように、バリデーションエラーメッセージがCHOICE TEXT
の下に表示されてしまう。
raise ValidationError("投票数は0以上で入力してください。")
エラーメッセージの表示位置を固定するために{"field_name": "error_message"}
としている。
参考
終わりに
- まだDjangoについて勉強し始めたばかりなので、「こっちの書き方の方が良いよ」などあればコメントください。
以上