2013-07-20 15 views
9

Sto cercando di farlo in modo che il validatore indichi "il nome utente deve essere alfanumerico". Questo è il mio codice finora. Ho confermato che convalida al momento giusto. L'unico problema è che, indipendentemente da ciò che provo, RegexValidator esegue ancora l'errore predefinito ("inserisci un valore valido").Il messaggio di validazione regex di Django non ha effetto

Questo è il mio codice. Ho anche provato senza il 'messaggio =' davanti, e lo è ancora detto "immettere un valore valido", invece di "nome utente deve essere alfanumerico"

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

risposta

22

ne dite di aggiungere il codice di errore:

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

Ha funzionato, ma perché il codice ha fatto la differenza? – matts1

+0

Sembra funzionare quando il codice è un valore diverso da Nessuno. Funziona con una stringa vuota e il numero intero 5 ... – matts1

+1

Da un core dev di Django: "Ho provato a vedere se il codice poteva essere modificato in modo da scegliere il messaggio più specifico, ma non è possibile determinare quale sia il più specifico: a volte il messaggio di errore del validatore è più specifico, a volte quello del campo 1. Ecco perché penso che dovresti usare il trucco del codice sopra. " https://code.djangoproject.com/ticket/17051 Penso che sia anche un po 'ragionevole. –

0

Prova a passare il messsage come,

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

Presumo che _ fosse un errore di battitura? Non funziona, sembra comunque la stessa sintassi. Le parentesi non fanno nulla a meno che non sia realmente una funzione (e ho provato comunque _ ottenere un NameError) – matts1

+0

@ matts1, non penso che '_' sia un errore di battitura. Guarda [qui] (https://docs.djangoproject.com/en/dev/topics/i18n/tr anslation /). – soon

+0

Sfortunatamente, anche se aveva senso, non risolveva il problema – 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

L'espressione regolare va bene. Sebbene sia ovvio che la r è una pratica migliore per iniziare, è solo necessario che tu abbia dei backslash nella regex. Come indicato nella domanda, lo rileva correttamente, ma mostra semplicemente l'errore sbagliato. – matts1

+0

prova a combinare il nome utente con mini, maiuscolo e numerico insieme e vedi cosa succede – drabo2005

+0

Una stringa è una stringa, indipendentemente dal suo contenuto. Il contenuto della stringa non dovrebbe influire sulla sua uscita. – matts1

3

stavo avendo problemi durante l'esecuzione di un RegexValidator, anche. Ma stavo cercando di aumentare l'errore salvando l'istanza del modello. Non funzionerà in questo modo! Solo quando si usano ModelForms i validatori vengono chiamati automaticamente.

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

Nota che validatori non verrà eseguito automaticamente quando si salva un modello, ma se si utilizza un ModelForm, verrà eseguito i tuoi validatori su tutti i campi che sono inclusi nel modulo ".