我希望有一个特定的模型字段,以1234-12345
的格式处理factory_id。
因此,如果用户尝试添加仅XXXXXXXXX
或XXXX-XXXXX
的工厂ID,它会自动将其作为XXXX-XXXXX
自动存储在数据库中。
有人指出我从哪里开始的方向?
答案 0 :(得分:1)
您可以使用Django's built-in Regex validator。 from django.core.validators import RegexValidator
示例强>
factory_id = models.CharField(max_length=10,
validators=[
RegexValidator(r'^[0-9]{4}-{0,1}[0-9]{5}$')
])
由于您要以XXXX-XXXXX格式保存字段。然后,您应该更改模型的save()
方法。
def save(self, *args, **kwargs):
if '-' not in self.factory_id:
self.factory_id = '{0}-{1}'.format(self.factory_id[:4], self.factory_id[4:])
super(MyModel, self).save(*args, **kwargs)
答案 1 :(得分:1)
正如@Rod Xavier所说,你可以使用RegexValidator
。但是,更准确地说,使用正则表达式,您可以同时允许XXXX-XXXXX
和XXXXXXXXX
,然后在使用短划线保存格式时(如果缺少)。如果条目不是9个字符长或10个字符没有短划线,RegexValidator
将拒绝该字段,并且该对象不会被保存。
from django.core.validators import RegexValidator
from django.db import models
class MyModel(models.Model):
# Notice the ? in the regex.
factory_id = models.CharField(max_length=10,
validators=[
RegexValidator(r'^[0-9]{4}-?[0-9]{5}$')
])
def save(self, *args, **kwargs):
""" This step is just formatting: add the dash if missing """
if '-' not in self.factory_id:
self.factory_id = '{0}-{1}'.format(
self.factory_id[:4], self.factory_id[4:])
# Continue the model saving
super(MyModel, self).save(*args, **kwargs)