Рассматривая код в django.forms.field (строки с 423 по 439) (в django 1.3.1).
Вы заметили, что для RegexField django переопределяет error_messages ['invalid'] с помощьюаргумент ключевого слова error_message, который по умолчанию равен none.
Поэтому, если вы хотите сохранить RegexField, просто выполните:
username = forms.RegexField(regex=r'^\w+$',max_length=30,widget=forms.TextInput(attrs=attrs_dict),label=_("Username"),error_message = _("This value must contain only letters,numbers and underscores."))
Чтобы принимать только цифры в качестве имени пользователя, я бы рекомендовал использовать формы.IntegerField, который дал бы что-то вроде:
username = forms.IntegerField(min_value = 0, error_messages={'invalid': _("This value must contain only letters,numbers and underscores.")})
Использование IntegerField - это, на мой взгляд, самый чистый и хороший способ сделать это.И он делает то, что вы хотите: ограничение имени пользователя только цифрами.