我希望用户输入10位数字的电话号码,如何设置整数字段“phone_no”来实现它?
我已将其设置为默认值,但我想检查数字输入:
模型.py
class Documents(models.Model):
docs_name = models.CharField(max_length=200,verbose_name="Names in Documents")
item_type = models.CharField(default="", max_length=100,
help_text='*Enter the item name you found e.g. Marksheet,key,wallet',verbose_name="Item type" )
police_station = models.CharField(max_length=255, help_text='*Enter the police station you sending the docs', verbose_name="Police station")
phone_no = models.IntegerField(default=0, verbose_name="Phone number")
date = models.DateTimeField(default=timezone.now,verbose_name="Date")
Description = models.TextField(blank=True, null=True, help_text='*Enter full description about item',verbose_name="Description")
pay_no = models.IntegerField(default=0,verbose_name="payment number")
publish = models.BooleanField(default=False)
image = models.ImageField(default="add Item image",
upload_to="DocsImage",blank=False, verbose_name="Images")
"""docstring for Documents"""
def __str__(self):
return self.docs_name
最佳答案
您可以使用 validators 来实现此目的。它们是函数(或任何可调用函数),您可以将其插入 Field 声明中以检查某些条件。
首先,在这种情况下,您应该使用 models.CharField(verbose_name="Phone number"...)
来存储电话号码,以防它们以 0 开头。
接下来我们必须执行测试来检查该值是否仅包含数字,并且仅包含 10。
选项 1:自定义验证器
第一种方法是自己创建验证器,以便运行您想要的测试:
创建在测试失败时将引发错误的函数:
def validate_digit_length(phone): if not (phone.isdigit() and len(phone) == 10): raise ValidationError('%(phone)s must be 10 digits', params={'phone': phone},)
您可以将此函数存储在模型旁边,或存储在单独的文件中并导入。
然后将此函数插入字段声明中的参数
validators
(类型列表):phone_no = models.CharField(verbose_name="Phone number", max_length=10, validators=[validate_digit_length], default='1234567890')
选项 2:使用内置验证器
您还可以在 django 中找到 built-in validators,适用于所有通用情况。
使用此 Charfield phone_no
,max_length
参数将检查最大大小,因此我们需要检查最小大小 (10) 以及字符是否为数字。我们可以通过 MinLengthValidator
和 int_list_validator
来实现这一点:
from django.core.validators import MinLengthValidator, int_list_validator
phone_no = models.CharField(verbose_name="Phone number", max_length=10,
validators=[int_list_validator(sep=''),MinLengthValidator(10),],
default='1234567890')
<小时/>
另一个探索链接:
What's the best way to store Phone number in Django models
关于python - 如何使模型中的整数字段固定为十个数字输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57131043/