【问题标题】:When storing phone numbers in Django, should I store them as an raw digits or use django.contrib.localflavor?在 Django 中存储电话号码时,我应该将它们存储为原始数字还是使用 django.contrib.localflavor?
【发布时间】:2012-03-30 10:06:24
【问题描述】:

标题可能有点混乱,但请让我解释一下:

目前,当我使用 5554441234 等原始数字存储电话号码时。然后在我的模板中,我将把数字“格式化”成555-444-1234

我意识到在 Django 的localflavor 中,有一个US phone number field 用于检查字符串是否为XXX-XXX-XXXX 格式。

所以我的问题是我应该将电话号码输入为原始数字,然后在模板中对其进行格式化,还是应该使用 localflavor 以格式化方式输入电话号码

如果我选择后者,XXX-XXX-XXXX 格式限制是否适用于 database API 级别或 Django 管理页面?

【问题讨论】:

    标签: python django django-models django-forms django-contrib


    【解决方案1】:

    按输入存储它们,仅在必要时去除周围的空白。用户格式化其数字的方式存储您不想通过规范化而丢失的语义信息。在美国,XXX-XXX-XXXX 格式很常见,但其他语言环境使用完全不同的格式。例如,我住的地方一些常见的格式是:XX-XXX XXX XXXXX/XXX XX XX+46(0)70-XXX XX XX 等等。

    显示给用户的数字应该与输入的格式相同,否则如果数字格式与用户习惯的格式不同,他或她会认为它是错误的,甚至可能无法识别该数字。另请参阅此讨论:http://discuss.fogcreek.com/dotnetquestions/default.asp?cmd=show&ixPost=6079&ixReplies=6

    【讨论】:

    • 如何签入 Django 管理员?有没有办法标记CharField 以在models.py 级别上强制执行XXX-XXX-XXXX 验证?
    • 重点是您应该尝试强制执行。告诉用户他们应该如何格式化自己的电话号码不是您网站的职责。
    【解决方案2】:

    如果您使用表单框架(例如,在 Django 管理中),输入的验证将在应用程序级别完成。因此,要在表单中输入电话号码,您必须将其格式化为XXX-XXX-XXXX

    在数据库级别,它只是一个CharField,因此数据库不会对格式进行任何检查。

    【讨论】:

    • 如果您想在models.py 级别上进行验证,您可以将您的函数附加到模型的pre_save 信号。在该函数中,您可以使用localflavor 来验证输入。
    【解决方案3】:

    试试 Django-phoneno。场地 。它可以在 Python 网站上找到。您需要使用安装 pip install django-phonenumber-field

    https://pypi.python.org/pypi/django-phonenumber-field/0.2a3

    【讨论】:

      猜你喜欢
      • 2013-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-04
      • 1970-01-01
      • 2012-05-14
      • 2011-11-04
      • 1970-01-01
      相关资源
      最近更新 更多