Django模型 - 存储多个联系号码的最佳方式

时间:2015-05-12 18:14:58

标签: python django

我是django开发者,我们一直在研究1.3。现在想试试最新版本,即1.8.1。由于1.3到1.8.1有很多变化。想知道Django中是否存在任何类型的PhoneField,它应该在一个字段中存储多个电话号码。 我正在考虑为此目的使用JSON字段,如

  • 应支持多个号码
  • 应支持数字< - li>中的“ - ”
  • 应支持国家/地区代码,例如+ XX
  • 应支持电话号码的regx验证。

使用JSON字段我可能很容易实现,但验证需要单独的功能。

contact_info = json.JSONField("ContactInfo", default=contact_default)

我找到了this,但认为与Textfield没什么不同。

2 个答案:

答案 0 :(得分:1)

您可以创建一个在保存到JSONField或HStoreField之前验证数字的函数。

示例:

import re

def validate_phone_number(phone_number):
    valid_number_pattern = re.compile(r'^(\d{3})-(\d{3})-(\d{4})$')

    is_valid = re.match(valid_number_pattern, phone_number)

    if not is_valid:
        return False
    else:
        return True

def save_number(request):
    if request.METHOD == 'POST':
        phone_number = request.POST['number']
        is_valid = validate_phone_number(phone_number)
        if not is_valid:
            messages.error(request, 'Error, your phone number is not valid!')
            return redirect('main:add_number')
        else:
            [... Add the number(s) to the model's JSONField here ...]
            messages.success(request, 'Success!')
            return redirect('main:index')

或者,您可以在此处使用所选正确答案中更复杂的正则表达式: https://stackoverflow.com/a/3868861/3345051

答案 1 :(得分:1)

If you are using PostgreSQL you can use ArrayField.

UITableView

Official documentation here. ArrayField