stefanfoulis/django-phonenumber-field 模板中电话号码的显示格式
Posted
技术标签:
【中文标题】stefanfoulis/django-phonenumber-field 模板中电话号码的显示格式【英文标题】:stefanfoulis/django-phonenumber-field display format of phone number in template 【发布时间】:2020-06-21 13:41:24 【问题描述】:我试图弄清楚如何使用 stefanfoulis/django-phonenumber-field 显示电话号码。我安装了 stefanfoulis/django-phonenumber-field[phonenumberslite]。在我的设置文件中,我有:
PHONENUMBER_DB_FORMAT = "NATIONAL"
PHONENUMBER_DEFAULT_REGION = "US"
在我的模型中,我有:
phone_number = PhoneNumberField(blank=True)
在我的表格中,我有:
phone_number = PhoneNumberField(max_length=25,required=False)
在我的模板中我有:
myform.phone_number
我可以输入多种格式的电话号码(831-555-5555、831-555-5555、831.555.5555),并在数据库中正确存储为 +18315555555。
但是当我在模板中使用表单域时,它总是显示为 +18315555555。我希望它显示为 831-555-5555 或 (831) 555-5555。如何在我的模板中以其中一种格式显示电话号码?有标签修饰符吗?
更新:事实证明,我在表单 init 方法中设置了表单字段的初始值,我需要将其设置为 as_national。现在设置为 (831) 555-5555。
【问题讨论】:
obj.phone.as_national
您的问题是关于呈现 表单字段(在表单中)还是关于在表单之外呈现数字本身?
就是在表单中渲染表单域。 myform 是表单,phone_number 在我的表单中定义为 phone_number = PhoneNumberField(max_length=25,required=False)。用于输入电话号码的文本字段显示号码,但显示为 +18315555555。
我不确定您所说的“将表单初始化方法中的表单字段的初始值设置为 as_national”是什么意思。您是否愿意为自己的问题提供答案以帮助他人?
【参考方案1】:
由于您的表单覆盖了字段,因此您需要重新定义区域。或者,您可以删除表单中 phone_number
的显式定义。
phone_number = PhoneNumberField(max_length=25, required=False, region="US")
【讨论】:
我的表单不是 ModelForm,而是 form.Form,所以我自己定义所有字段。我已将 phone_number 更改为 phone_number = PhoneNumberField(max_length=25,required=False, region='US') 但模板仍然在文本框中显示表单字段电话号码,号码显示为 +18315555555。我希望它会显示在 831-555-5555 或 (831) 555-5555。以这两种格式输入电话号码都可以正常工作。【参考方案2】:我有一个表单类
class UserForm(forms.Form):
user_id = forms.IntegerField(required=False, widget=forms.HiddenInput())
email = forms.EmailField(max_length=100,required=True)
phone_number = PhoneNumberField(max_length=25,required=False)
def __init__(self, userBeingEdited=None, *args, **kwargs):
super(UserAdminForm, self).__init__(*args, **kwargs)
if userBeingEdited != None:
self.initial['user_id'] = userBeingEdited.id
self.initial['email'] = userBeingEdited.email
if userBeingEdited.phone_number != "":
self.initial['phone_number'] = userBeingEdited.phone_number.as_national
我错误地没有在 __init__
方法的最后一行包含 as_national 并且电话号码没有被格式化。
【讨论】:
以上是关于stefanfoulis/django-phonenumber-field 模板中电话号码的显示格式的主要内容,如果未能解决你的问题,请参考以下文章