Улучшение модели Recipient: PhoneNumberField и поле notes

- Заменено поле phone с CharField на PhoneNumberField для автоматической нормализации телефонов
- Убран регион BY, установлен region=None для универсальности (поддержка номеров разных стран)
- Добавлено поле notes для дополнительной информации о получателе (мессенджеры, соцсети и т.д.)
- Улучшена логика поиска существующих получателей:
  * Использование нормализованного телефона из PhoneNumberField
  * Регистронезависимый поиск по имени (name__iexact)
  * Обновление notes при нахождении существующего получателя
- Обновлена форма OrderForm для работы с PhoneNumberField и новым полем notes
- Обновлен шаблон order_form.html для отображения нового поля
- Созданы миграции для изменений модели
This commit is contained in:
2025-12-25 11:44:18 +03:00
parent 298d797286
commit 2f8a421e64
7 changed files with 121 additions and 10 deletions

View File

@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from django import forms
from django.forms import inlineformset_factory
from phonenumber_field.formfields import PhoneNumberField
from .models import Order, OrderItem, Transaction, Address, OrderStatus, Recipient, Delivery
from customers.models import Customer
from products.models import Product, ProductKit
@@ -47,11 +48,20 @@ class OrderForm(forms.ModelForm):
label='Имя получателя'
)
recipient_phone = forms.CharField(
max_length=20,
recipient_phone = PhoneNumberField(
region=None,
required=False,
widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Телефон получателя'}),
label='Телефон получателя'
label='Телефон получателя',
help_text='Введите телефон в любом формате, будет автоматически преобразован'
)
recipient_notes = forms.CharField(
max_length=200,
required=False,
widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Мессенджер, соцсеть и т.д.'}),
label='Дополнительная информация',
help_text='Мессенджер, соцсеть или другая информация о получателе (необязательно)'
)
# Поля для работы с адресом
@@ -263,7 +273,8 @@ class OrderForm(forms.ModelForm):
else:
self.fields['recipient_source'].initial = 'new'
self.fields['recipient_name'].initial = self.instance.recipient.name or ''
self.fields['recipient_phone'].initial = self.instance.recipient.phone or ''
self.fields['recipient_phone'].initial = str(self.instance.recipient.phone) if self.instance.recipient.phone else ''
self.fields['recipient_notes'].initial = self.instance.recipient.notes or ''
else:
self.fields['other_recipient'].initial = False