如何在只能包含数字和字母的Django模型上创建CharField?
models.CharField(_('name'), max_length=50, null=False, blank=False)
答案 0 :(得分:6)
另一种选择是对CharField使用validators
选项(docs)
答案 1 :(得分:5)
模型级别的控制可能包含一些不需要的行为,这些行为等同于模式约束,并且在操作数据库时应用(即:备份),如果您完全确定需要在模型级别而不是表单上进行控制,那么您应该定义新的validator或使用现有的。{/ p>
测试字母数字字符串的基本方法是
'string'.isalpha()
您可以将该评估放在模型的save方法中,但如果您想要更多控制或自动引发ValidationError,您可以为模型定义验证器。这样你就可以在不涉及表格的情况下进行单元测试。但是,请确保您的实施不会影响您的表现。
“自动化任务从远程服务器获取hex32令牌”,因此您在运行时使用以下验证器检查这些令牌:
RegexValidator(r'^[A-Fa-f0-9]{32}$',
message='Key must be Hex len 32',
code='Invalid Key')
如果它不匹配,则自动引发ValidationError及其详细信息。
在你的情况下,你可以这样做:
models.py :
from validators import isalphavalidator
class SomeModel(Model):
some_alpha_field = models.CharField(_('name'), validators=[isalphavalidator], max_length=50, null=False, blank=False)
validators.py
from django.core.validators import RegexValidator
'''
This regex assumes that you have a clean string,
you should clean the string for spaces and other characters
'''
isalphavalidator = RegexValidator(r'^[\w]*$',
message='name must be alphanumeric',
code='Invalid name')
答案 2 :(得分:3)
不要使用CharField使用RegexField代替regex="[A-z0-9]+"
您可以使用相同的逻辑使该字段变得简单:
class AlphaNumericField(CharField):
def clean(self, value, model_instance):
value = super(AlphaNumericField, self).clean(value, model_instance)
if not re.match(r'[A-z0-9]+', value):
raise ValidationError('AlphaNumeric characters only.')
return value
答案 3 :(得分:0)
而不是 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 '}))*
依旧......
如果您使用 RegexValidator ,则必须处理视图中的错误。 它对我有用,试试这个简单的方法...... 这将允许用户仅输入字母和空格