如何使Django表单字段仅包含字母数字字符

时间:2013-06-18 09:22:26

标签: python django

我有这个模型

name = models.CharField(max_length=50, blank=True, null=True)
email = models.EmailField(max_length=50, unique=True)

我希望用户在两个字段中都不能使用除字母数字之外的任何其他字符。

有什么办法吗?

3 个答案:

答案 0 :(得分:55)

您可以使用validator来限制字段接受的内容。一个RegexValidator可以解决这个问题:

alphanumeric = RegexValidator(r'^[0-9a-zA-Z]*$', 'Only alphanumeric characters are allowed.')

name = models.CharField(max_length=50, blank=True, null=True, validators=[alphanumeric])
email = models.EmailField(max_length=50, unique=True, validators=[alphanumeric])

请注意,已经有validate_email validator可以为您验证电子邮件地址;上面的alphanumeric验证器不允许使用有效的电子邮件地址。

答案 1 :(得分:1)

而不是RegexValidator,只在表单属性中进行验证,如...

        class StaffDetailsForm(forms.ModelForm):
             first_name = forms.CharField(required=True,widget=forms.TextInput(attrs={'class':'form-control' , 'autocomplete': 'off','pattern':'[A-Za-z ]+', 'title':'Enter Characters Only '}))

依旧......

否则你将不得不处理视图中的错误。 它对我有用,试试这个简单的方法...... 这将允许用户仅输入字母和空格

答案 2 :(得分:0)

这比您想要的宽一点,但是您也可以使用SlugField

子弹基本上是某物的简短标签,仅包含 字母,数字,下划线或连字符。它们通常用于 网址。例如,在典型的博客条目URL中: https://www.geeksforgeeks.org/add-the-slug-field-inside-django-model/

field_name = models.SlugField(max_length=200, **options)