From 896cb061ab5397b645958164caace805d53943e9 Mon Sep 17 00:00:00 2001 From: Bai Date: Wed, 5 Jul 2023 16:42:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=97=B6=E6=89=8B=E6=9C=BA=E5=8F=B7=E4=B8=BA?= =?UTF-8?q?dict=E7=B1=BB=E5=9E=8B=E6=8A=A5=E9=94=99=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/common/serializers/fields.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/apps/common/serializers/fields.py b/apps/common/serializers/fields.py index cf92391e1..844c424e5 100644 --- a/apps/common/serializers/fields.py +++ b/apps/common/serializers/fields.py @@ -212,6 +212,23 @@ class BitChoicesField(TreeChoicesField): class PhoneField(serializers.CharField): + + def to_internal_value(self, data): + if isinstance(data, dict): + code = data.get('code') + phone = data.get('phone', '') + if code and phone: + data = '{}{}'.format(code, phone) + else: + data = phone + try: + phone = phonenumbers.parse(data, 'CN') + data = '{}{}'.format(phone.country_code, phone.national_number) + except phonenumbers.NumberParseException: + data = '+86{}'.format(data) + + return super().to_internal_value(data) + def to_representation(self, value): if value: try: