web-dev-qa-db-ja.com

Django IntegerFieldのmax_length

次のモデルフィールドがあります。

id_student = models.PositiveIntegerField(primary_key=True, max_length=10)

max_length制限は機能しません。管理者にログインして、10文字以上のIDを持つ学生を作成できます。どうすれば解決できますか?

20

Djangoは整数フィールドのmax_lengthを無視し、Django 1.8+で警告します。詳細については ticket 23801 を参照してください。

最大値検証ツールを使用するか、

from Django.core.validators import MaxValueValidator

class MyModel(models.Model):
    ...
    id_student = models.PositiveIntegerField(primary_key=True, validators=[MaxValueValidator(9999999999)])

または、CharFieldを使用してIDを保存し、正規表現バリデーターを使用して、IDが完全に数字で構成されていることを確認します。これには、ゼロで始まるIDを許可するという利点があります。

class MyModel(models.Model):
    ...
    id_student = models.CharField(primary_key=True, max_length=10, validators=[RegexValidator(r'^\d{1,10}$')])
46
Alasdair