2015-06-15 13 views
12

mam tego modelu murawę:Django max_length dla IntegerField

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

Ograniczenie max_length nie działa. Mogę zalogować się do administratora i utworzyć ucznia o identyfikatorze z więcej niż 10 znakami. Jak mogę to rozwiązać?

Odpowiedz

30

Django ignoruje max_length dla pól całkowitych i wyświetli ostrzeżenie w Django 1.8+. Aby uzyskać więcej informacji, patrz ticket 23801.

Można użyć max wartość walidator,

from django.core.validators import MaxValueValidator 

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

lub użyć CharField do przechowywania identyfikatora i używać walidatora regex aby upewnić się, że identyfikator jest w całości wykonany z cyfr. Miałoby to tę zaletę, że pozwalałoby na identyfikację zaczynającą się od zera.

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