【问题标题】:How to change django-phonenumber-field error messages如何更改 django-phonenumber-field 错误消息
【发布时间】:2021-09-15 18:33:14
【问题描述】:

我正在使用 django-phonenumber-field。

使用此应用的每个人都可能知道,任何前缀都有相同的示例“输入有效的电话号码(例如 +12125552368)。”

Enter a valid phone number (e.g. +12125552368).

所以,我不喜欢它,我想更改它,但我无法更改此文本,我想我会像这样在 html 中更改它:

    {% if form.phone.errors %}
      
        <p class="alert-p"></p>Incorrect International Calling Code or Mobile Number!</p>
     
    {% endif %}

Incorrect International Calling Code or Mobile Number!

但是当我更改它时,我意识到这种方法对我不起作用,因为用户可能会输入相同的电话号码,并且无法理解为什么如果它没有发送适当的错误消息就无法保存。 (电话号码是唯一的) 现在有一个问题,在一种情况下,当用户在前缀中输入错误的数字时,这次我希望我的内置文本作为错误消息退出,但是当用户输入相同的数字时我想退出django-phonenumber-field 默认错误信息 Account with this Phone already exists.

我会就如何解决这个问题听取任何建议。

forms.py

    from django import forms
    from django.contrib.auth.forms import ReadOnlyPasswordHashField
    from django.db.models.fields import CharField
    from django.forms import widgets
    from phonenumber_field.formfields import PhoneNumberField
    from phonenumber_field.widgets import PhoneNumberPrefixWidget
    from .models import Account
    from django_countries.widgets import CountrySelectWidget
    from django import forms
    from phonenumber_field.formfields import PhoneNumberField
    

class UserChangeForm(forms.ModelForm):

    class Meta:
        model = Account
        fields = ('email', 'fname', 'lname', 'phone','bday', 'country', 'gender','picture')
        
    # email = forms.CharField(widget=forms.EmailInput(attrs={'class':'form-control'}))
    # fname = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Name'}))
    # lname = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control', 'placeholder':'Surname'}))
    phone = PhoneNumberField(widget=PhoneNumberPrefixWidget(initial='GE'))
    # bday = forms.CharField(widget=DatePickerInput(attrs={'class':'form-control', 'placeholder':'Birth Date'}))
    # country = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Country'}))
    # gender = forms.ChoiceField(choices=Account.GENDER_CHOICES, widget=forms.Select(attrs={'class':'regDropDown'}))
    # picture = forms.FileField(widget=forms.ClearableFileInput(attrs={'class':'form-control'}))


    
    
    def clean_password(self):
        # Regardless of what the user provides, return the initial value.
        # This is done here, rather than on the field, because the
        # field does not have access to the initial value
        return self.initial["password"]

【问题讨论】:

    标签: python django django-phone-field


    【解决方案1】:

    在表单中,您可以通过在phone_number.error_messages 字典中覆盖错误消息来覆盖它:

    from django import forms
    from phonenumber_field.formfields import PhoneNumberField
    
    class UserChangeForm(forms.ModelForm):
        # …
        phone = PhoneNumberField(widget=PhoneNumberPrefixWidget(initial='GE'))
        phone.error_messages['invalid'] = 'Incorrect International Calling Code or Mobile Number!'
        # …

    【讨论】:

    • 谢谢你的回答,如果你不介意的话,可以写信给我更详细的,我按照你写给我的形式写了,但是什么都没有改变,我应该在视图中写点什么。派?好久没学Django了,简单的东西可能看不懂。
    • @ATISE:你能分享一下你目前使用的表格吗? Edit 问题。您能指定您使用的django-phonenumber-field 的版本吗?
    • 我在帖子中添加了 forms.py。我正在使用“django-phonenumber-field 0.2a1”这个版本
    • @ATISE:你应该将它应用到你正在使用的Form,所以在这种情况下UserChangeForm
    • 现在可以使用了。非常感谢您的帮助,您是钻石。我整天都在努力解决这个问题。
    猜你喜欢
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 2023-01-07
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    相关资源
    最近更新 更多