2013-07-20 20 views
9

Próbuję ją pobrać, aby walidator powiedział, że "nazwa użytkownika musi być alfanumeryczna". To jest mój kod do tej pory. Potwierdziłem, że sprawdza się we właściwym czasie. Jedyny problem polega na tym, że niezależnie od tego, co próbuję, RegexValidator nadal zachowuje domyślny błąd ("wprowadź poprawną wartość").Wiadomość weryfikatora regex Django nie ma żadnego efektu

To jest mój kod. Próbowałem też go bez „message =” z przodu, i nadal mówi „podaj poprawną wartość”, zamiast „nazwa użytkownika musi być alfanumeryczny”

user = CharField(
    max_length=30,required=True, 
    validators=[ 
     RegexValidator('^[a-zA-Z0-9]*$', 
      message='Username must be Alphanumeric' 
     ), 
    ] 
) 

Odpowiedz

22

Jak o dodanie kodu błędu:

user = CharField(
    max_length=30, 
    required=True, 
    validators=[ 
     RegexValidator(
      regex='^[a-zA-Z0-9]*$', 
      message='Username must be Alphanumeric', 
      code='invalid_username' 
     ), 
    ] 
) 
+0

Zadziałało, ale dlaczego kod miał znaczenie? – matts1

+0

Wygląda na to, że działa, gdy kod ma jakąkolwiek wartość inną niż None. Działa z pustym łańcuchem i liczbą całkowitą 5 ... – matts1

+1

Z jądra systemu Django: "Próbowałem sprawdzić, czy kod można zmienić, aby wybrać bardziej szczegółowy komunikat, ale nie można określić, który z nich jest najdokładniej: czasami komunikat o błędzie sprawdzania poprawności jest bardziej szczegółowy, czasami jest to pole, dlatego uważam, że powinieneś użyć powyższej sztuczki kodującej. " https://code.djangoproject.com/ticket/17051 Myślę, że jest to trochę rozsądne. –

0

Spróbuj mijając messsage jak

user = CharField(
    max_length=30, 
    required=True, 
    validators=[ 
     RegexValidator(
      regex=r'^[a-zA-Z0-9]*$', 
      message=_('Username must be Alphanumeric'), 
     ), 
    ] 
) 
+0

Zakładam, że _ było literówką? To nie działa - w każdym razie wygląda na to, że jest to ta sama składnia.Na nawiasach nic nie robię, chyba że jest to funkcja (i mimo to próbowałem _) otrzymywanie NameError) – matts1

+0

@ matts1, Nie sądzę, że '_' jest literówką. Patrz [tutaj] (https://docs.djangoproject.com/en/dev/topics/i18n/tr anslacja /). – soon

+0

Niestety, chociaż miało to sens, nie rozwiązało problemu. – matts1

0
a validate user name here should contain at least one minuscule letter, one capital letter and one numeric, if i understand your code. 
to complete Virendra Rajput answer correct the regex with that: 
regex=r'^[a-zA-Z0-9]*$' start with the r' 
+0

Wypis jest w porządku. Chociaż wprawdzie r jest lepszą praktyką na początek, to jest tylko neccecary, jeśli masz backslashes w regex. Jak stwierdzono w pytaniu, wykrywa je poprawnie, ale wyświetla po prostu błędny błąd. – matts1

+0

spróbuj połączyć nazwę użytkownika z mini, kapitałem i cyfrą i zobacz, co się stanie – drabo2005

+0

Ciąg jest ciągiem, bez względu na jego zawartość. Treść ciągu nie powinna wpływać na to, czy wyprowadza. – matts1

3

miałem kłopoty z prowadzeniem RegexValidator też. Ale próbowałem podnieść błąd, zapisując instancję modelu. To nie zadziała w ten sposób! Tylko przy użyciu ModelForms walidatory są wywoływane automatycznie.

W https://docs.djangoproject.com/en/dev/ref/validators/#how-validators-are-run

Zauważ, że Walidatory nie zostanie uruchomiony automatycznie po zapisaniu modelu, ale jeśli używasz ModelForm, będzie uruchamiać weryfikatorów na wszelkich polach, które są zawarte w formularzu.”

Powiązane problemy