この質問は5年前のものなので、質問を更新する際に、少なくとも一部の機能が存在しなかった可能性のある過去にうなずいていることを説明する必要があります。
最近のフォームでスラッグを処理する最も簡単な方法は、単に を使用することdjango.models.SlugField
です。それ自体が検証され、このフィールドがインデックスであることを暗示します。
モデルでこれを使用していない場合でも、SlugField が使用する同じバリデーターをフックできます。
from django.core.validators import validate_slug
slug = forms.CharField(..., validators=[validate_slug])
舞台裏でチェックしたり、独自のバリデータを書きたいだけの場合は、同様の手法を使用して、有効なスラッグの Django の定義を取り込むことができます。上記のvalidate_slugが使用するのは、コンパイルされた正規表現です。
from django.core.validators import slug_re
if slug_re.match(...):
...
それが変わるとは想像できませんが、Django のスラッグの考え方に固執することで、Django がいつか変更された場合でも一貫性を確保できます。