La especificación es todos los caracteres excepto los espacios en blanco y los caracteres en mayúscula.
Aquí está el validador de expresiones regulares en el modelo:
path = models.CharField(max_length=150, help_text="/blog/posts/...", unique=True, validators=[ RegexValidator(regex='(^[a-z0-9-:!@#$%^&*(){}\\?<>,.;\'"`~|/]+){1}', message="Lowercase with no whitespace allowed") ])Aquí está la prueba unitaria:
def test_path_regex(self): with self.assertRaises(ValidationError): post = Post(title="bad regex", path="Super-2Test-2", slug="special") if post.full_clean(): post.save() with self.assertRaises(ValidationError): post = Post(title="bad regex", path="super-2test 2", slug="special") if post.full_clean(): post.save() self.assertEqual(Post.objects.filter(title="bad regex").count(), 0)Resultado:
line 27, in test_path_regex post.save() AssertionError: ValidationError not raised FAILED (failures=1) la razón de esto parece ser que RegexValidator no está marcando el texto si puede coincidir con parte de la cadena y {1} no está ayudando. Como puede ver en este enlace: http://pythex.org/
Por favor ayuda. Gracias.
La especificación es todos los caracteres excepto los espacios en blanco y los caracteres en mayúscula.
Simplemente puede usar la Clase de caracteres negados . En tu caso será [^\sA-Z] . Esto coincidirá con todos los caracteres excepto los espacios en whitespace y los Upper Case alphabets en mayúsculas.