JMi*_*ira 4 django django-models
如何在只能有数字和字母的Django模型上创建CharField?
models.CharField(_('name'), max_length=50, null=False, blank=False)
Run Code Online (Sandbox Code Playgroud)
小智 5
模型级别的控制可能包括一些不需要的行为,这些行为等同于模式约束,并且在操作数据库时应用(即:备份),如果您完全确定需要在模型级别而不是表单上进行控制,那么您应该定义一个新的验证者或使用现有的验证者.
测试字母数字字符串的基本方法是
'string'.isalpha()
Run Code Online (Sandbox Code Playgroud)
您可以将该评估放在模型的save方法中,但如果您想要更多控制或自动引发ValidationError,您可以为模型定义验证器.这样你就可以在不涉及表格的情况下进行单元测试.但是,请确保您的实施不会影响您的表现.
"自动化任务从远程服务器获取hex32令牌",因此您可以在运行时使用以下验证器检查这些令牌:
RegexValidator(r'^[A-Fa-f0-9]{32}$',
message='Key must be Hex len 32',
code='Invalid Key')
Run Code Online (Sandbox Code Playgroud)
如果它不匹配,则自动引发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)
Run Code Online (Sandbox Code Playgroud)
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')
Run Code Online (Sandbox Code Playgroud)