Python 用于格式化字符字段数据的自定义模型字段

Python 用于格式化字符字段数据的自定义模型字段,python,django,django-models,Python,Django,Django Models,我希望有一个特定的模型字段来处理工厂id,格式为1234-12345 因此,如果用户试图添加一个工厂id,该id仅为xxxxxxxx或XXXX-XXXXX,它将自动神奇地将其存储在数据库中,作为XXXX-XXXXX 有人告诉我从哪里开始吗?你可以用从django.core.validators导入RegexValidator 示例 factory_id = models.CharField(max_length=10, validat

我希望有一个特定的模型字段来处理工厂id,格式为
1234-12345

因此,如果用户试图添加一个工厂id,该id仅为
xxxxxxxx
XXXX-XXXXX
,它将自动神奇地将其存储在数据库中,作为
XXXX-XXXXX

有人告诉我从哪里开始吗?

你可以用<代码>从django.core.validators导入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)

正如@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)

谢谢你,不过我只是在使用的时候出错了
error at/dash/add multiple repeat
您还应该使用CharField而不是CharField(对于使用此作为参考的人:)@NeilAshleyHickman这两个问题都已修复。事实上,我没有注意到那令人振奋的
{0,1}
,太棒了,非常感谢。