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

标签 python django django-models

我希望有一个特定的模型字段来处理 1234-12345 格式的factory_id。

这样,如果用户尝试添加 XXXXXXXXXXXXX-XXXXX 的工厂 ID,它会自动将其神奇地存储在数据库中作为 XXXX-XXXXX
有人指出我从哪里开始吗?

最佳答案

正如 @Rod Xavier 所说,您可以使用 RegexValidator 来实现这一点。但是,更准确地说,使用正则表达式,您可以同时允许 XXXX-XXXXXXXXXXXXXX,然后在保存格式时使用破折号(如果缺少)。如果条目长度不是 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/

相关文章:

python - 对 Python 的 `time.strftime()` 使用 Unicode 格式

php - 如果使用中文字符,为什么 php md5() 总是与 python 的 hash.md5() 不同?

python - 选择某些显示器以使用 gtk 全屏显示

python - 关于接受 zip 文件进行处理的守护进程的建议

python - 在 Django 中为模型创建 21 个字符的唯一字段

Python - 在 GPU 工作时将数据从存储传输到 RAM

python - 如何在 Django 上配置 Stripe Connect 以收取交易费用?

django - Salt - virtualenv 的多个需求文件

django - 在不更改原始Django应用的情况下向Django FlatPages添加功能

python - Django更改密码而无需再次登录