我希望有一个特定的模型字段来处理 1234-12345
格式的factory_id。
这样,如果用户尝试添加 XXXXXXXXX
或 XXXX-XXXXX
的工厂 ID,它会自动将其神奇地存储在数据库中作为 XXXX-XXXXX
。
有人指出我从哪里开始吗?
最佳答案
正如 @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)
关于python - 用于格式化字符字段数据的自定义模型字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23719993/