Улучшение модели 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:
@@ -47,6 +47,7 @@ class AddressService:
|
||||
form_data (dict): Словарь с данными из формы
|
||||
- recipient_name
|
||||
- recipient_phone
|
||||
- recipient_notes (опционально)
|
||||
|
||||
Returns:
|
||||
Recipient: Новый объект получателя (не сохраненный в БД)
|
||||
@@ -54,6 +55,7 @@ class AddressService:
|
||||
recipient = Recipient(
|
||||
name=form_data.get('recipient_name', ''),
|
||||
phone=form_data.get('recipient_phone', ''),
|
||||
notes=form_data.get('recipient_notes', '') or None,
|
||||
)
|
||||
return recipient
|
||||
|
||||
@@ -90,7 +92,8 @@ class AddressService:
|
||||
# Если режим "новый получатель"
|
||||
if recipient_source == 'new':
|
||||
name = form_data.get('recipient_name', '').strip()
|
||||
phone = form_data.get('recipient_phone', '').strip()
|
||||
phone = form_data.get('recipient_phone', '')
|
||||
notes = form_data.get('recipient_notes', '').strip() or None
|
||||
|
||||
if not name or not phone:
|
||||
return None
|
||||
@@ -105,18 +108,23 @@ class AddressService:
|
||||
# Обновляем существующего получателя
|
||||
db_order.recipient.name = name
|
||||
db_order.recipient.phone = phone
|
||||
db_order.recipient.notes = notes
|
||||
# Сохранять будем в views.py, здесь просто возвращаем объект
|
||||
return db_order.recipient
|
||||
except Order.DoesNotExist:
|
||||
pass
|
||||
|
||||
# Проверяем, есть ли уже такой получатель в БД (по имени и телефону)
|
||||
# Проверяем, есть ли уже такой получатель в БД (по имени и нормализованному телефону)
|
||||
# PhoneNumberField автоматически нормализует телефон, поэтому можно искать напрямую
|
||||
existing_recipient = Recipient.objects.filter(
|
||||
name=name,
|
||||
name__iexact=name.strip(),
|
||||
phone=phone
|
||||
).first()
|
||||
|
||||
if existing_recipient:
|
||||
# Обновляем заметки, если они изменились
|
||||
if existing_recipient.notes != notes:
|
||||
existing_recipient.notes = notes
|
||||
return existing_recipient
|
||||
|
||||
# Создаем нового получателя
|
||||
|
||||
Reference in New Issue
Block a user